From c257cfe1dc9ef5299ce649aee6e324d5d5008163 Mon Sep 17 00:00:00 2001
From: Benjamin Mack <benni@typo3.org>
Date: Tue, 14 Jul 2015 18:05:36 +0200
Subject: [PATCH] [TASK] Add GET parameter to JS files fetched via RequireJS

As most files are loaded via RequireJS now, the configuration
needs to add a GET parameter in order to avoid browser caching
of changed JavaScript files.

For development environments the current timestamp is added. For
other environments / application contexts a hash based on the
TYPO3_version is added, allowing to have end-users to fetch
the latest version after e.g. TYPO3 has been updated.

Resolves: #68133
Releases: master
Change-Id: Ifbc13cafe519a2a83f51c3869a028028f3b24368
Reviewed-on: http://review.typo3.org/41219
Reviewed-by: Georg Ringer <georg.ringer@gmail.com>
Tested-by: Georg Ringer <georg.ringer@gmail.com>
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
---
 typo3/sysext/core/Classes/Page/PageRenderer.php | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/typo3/sysext/core/Classes/Page/PageRenderer.php b/typo3/sysext/core/Classes/Page/PageRenderer.php
index 73f7dc0951c8..86698eca2a56 100644
--- a/typo3/sysext/core/Classes/Page/PageRenderer.php
+++ b/typo3/sysext/core/Classes/Page/PageRenderer.php
@@ -1547,6 +1547,12 @@ class PageRenderer implements \TYPO3\CMS\Core\SingletonInterface {
 
 		// load all paths to map to package names / namespaces
 		if (empty($this->requireJsConfig)) {
+			// In order to avoid browser caching of JS files, adding a GET parameter to the files loaded via requireJS
+			if (GeneralUtility::getApplicationContext()->isDevelopment()) {
+				$this->requireJsConfig['urlArgs'] = 'bust=' . $GLOBALS['EXEC_TIME'];
+			} else {
+				$this->requireJsConfig['urlArgs'] = 'bust=' . GeneralUtility::shortMD5(TYPO3_version . $GLOBALS['TYPO3_CONF_VARS']['SYS']['encryptionKey']);
+			}
 			// first, load all paths for the namespaces, and configure contrib libs.
 			$this->requireJsConfig['paths'] = array(
 				'jquery-ui' => $this->backPath . 'sysext/core/Resources/Public/JavaScript/Contrib/jquery-ui',
-- 
GitLab