Browse Source

apply --javascript-delay settings for non-main resource loaders

In e02ff7efaf7b617986fc11c08a693e203c64a465, the --javascript-delay
setting was ignored for all non-main resource loaders e.g. headers,
footers and TOC pages. This caused assets (CSS, JS) requested in
these loaders to sometimes fail to complete loading before the
loadFinished() signal was emitted, which was earlier masked by the
default 200ms delay.

The earlier behavior is now restored and longer --javascript-delay
can be used in case resources take longer to load.

fixes #2183 and a number of related issues
Ashish Kulkarni 10 years ago
parent
commit
91e4f1c83a
2 changed files with 7 additions and 8 deletions
  1. 1 0
      CHANGELOG.md
  2. 6 8
      src/lib/multipageloader.cc

+ 1 - 0
CHANGELOG.md

@@ -6,6 +6,7 @@ v0.12.3 (unreleased)
 * downgrade libpng to 1.2.53
 * **#1843**: add --keep-relative-links and --resolve-relative-links to resolve relative links
 * **#2104**: renamed COPYING to LICENSE
+* **#2183**: apply --javascript-delay settings for non-main resource loaders
 * **#2190**: do not depend on ICU even if it is already installed
 * **#2194**: **[qt]** fix debugging of Qt/WebKit due to missing debug information
 * **#2280**: do not allow data URIs for --header-html or --footer-html

+ 6 - 8
src/lib/multipageloader.cc

@@ -269,19 +269,17 @@ void ResourceObject::loadFinished(bool ok) {
 			warning(QString("Failed loading page ") + url.toString() + " (ignored)");
 	}
 
-	if (!multiPageLoader.isMainLoader) {
-		loadDone();
-		return;
-	}
+	bool isMain = multiPageLoader.isMainLoader;
 
-	// Evaluate extra user supplied javascript
-	foreach (const QString & str, settings.runScript)
-		webPage.mainFrame()->evaluateJavaScript(str);
+	// Evaluate extra user supplied javascript for the main loader
+	if (isMain)
+		foreach (const QString & str, settings.runScript)
+			webPage.mainFrame()->evaluateJavaScript(str);
 
 	// XXX: If loading failed there's no need to wait
 	//      for javascript on this resource.
 	if (!ok || signalPrint || settings.jsdelay == 0) loadDone();
-	else if (!settings.windowStatus.isEmpty()) waitWindowStatus();
+	else if (isMain && !settings.windowStatus.isEmpty()) waitWindowStatus();
 	else QTimer::singleShot(settings.jsdelay, this, SLOT(loadDone()));
 }