From 43a4671c64dff36f287b2415019520778407a91a Mon Sep 17 00:00:00 2001 From: eight Date: Wed, 28 Nov 2018 12:57:44 +0800 Subject: [PATCH] Change: defer page script injection. Try to inject to head (#584) --- content/apply.js | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/content/apply.js b/content/apply.js index 6a83d4e5..bbb6a338 100644 --- a/content/apply.js +++ b/content/apply.js @@ -65,10 +65,9 @@ const APPLY = (() => { // Since it's easy to spoof the browser version in pre-Quantum FF we're checking // for getPreventDefault which got removed in FF59 https://bugzil.la/691151 const EVENT_NAME = chrome.runtime.id; - const usePageScript = CHROME || isOwnPage || Event.prototype.getPreventDefault ? - Promise.resolve(false) : injectPageScript(); + let ready; return (el, content) => - usePageScript.then(ok => { + checkPageScript().then(ok => { if (!ok) { const disabled = el.disabled; el.textContent = content; @@ -83,6 +82,14 @@ const APPLY = (() => { } }); + function checkPageScript() { + if (!ready) { + ready = CHROME || isOwnPage || Event.prototype.getPreventDefault ? + Promise.resolve(false) : injectPageScript(); + } + return ready; + } + function injectPageScript() { const scriptContent = EVENT_NAME => { document.currentScript.remove(); @@ -125,7 +132,7 @@ const APPLY = (() => { script.src = src; script.onerror = () => resolve(false); window.addEventListener(EVENT_NAME, handleInit); - document.documentElement.appendChild(script); + (document.head || document.documentElement).appendChild(script); return promise.then(result => { script.remove(); window.removeEventListener(EVENT_NAME, handleInit);