diff --git a/extensions/chrome/insertviewer.js b/extensions/chrome/insertviewer.js index 6d39a1c31..82e106ead 100644 --- a/extensions/chrome/insertviewer.js +++ b/extensions/chrome/insertviewer.js @@ -27,6 +27,12 @@ function getViewerURL(pdf_url) { } function showViewer(url) { + if (document.documentElement === null) { + // If the root element hasn't been rendered yet, delay the next operation. + // Otherwise, document.readyState will get stuck in "interactive". + setTimeout(showViewer, 0, url); + return; + } // Cancel page load and empty document. window.stop(); document.body.textContent = ''; diff --git a/extensions/chrome/manifest.json b/extensions/chrome/manifest.json index 26dea5de1..e36274708 100644 --- a/extensions/chrome/manifest.json +++ b/extensions/chrome/manifest.json @@ -11,7 +11,8 @@ "permissions": [ "webRequest", "webRequestBlocking", "", - "tabs" + "tabs", + "webNavigation" ], "content_scripts": [{ "matches": [ diff --git a/extensions/chrome/pdfHandler.js b/extensions/chrome/pdfHandler.js index 28ba1a953..e4028f3dc 100644 --- a/extensions/chrome/pdfHandler.js +++ b/extensions/chrome/pdfHandler.js @@ -62,6 +62,28 @@ function insertPDFJSForTab(tabId, url) { * @param {string} url The URL of the pdf file. */ function activatePDFJSForTab(tabId, url) { + if (!chrome.webNavigation) { + // Opera... does not support the webNavigation API. + activatePDFJSForTabFallbackForOpera(tabId, url); + return; + } + var listener = function webNavigationEventListener(details) { + if (details.tabId === tabId) { + insertPDFJSForTab(tabId, url); + chrome.webNavigation.onCommitted.removeListener(listener); + } + }; + var urlFilter = { + url: [{ urlEquals: url }] + }; + chrome.webNavigation.onCommitted.addListener(listener, urlFilter); +} + +/** + * Fallback for Opera. + * @see activatePDFJSForTab + **/ +function activatePDFJSForTabFallbackForOpera(tabId, url) { chrome.tabs.onUpdated.addListener(function listener(_tabId) { if (tabId === _tabId) { insertPDFJSForTab(tabId, url);