0

在后台脚本的 firefox 扩展中,我们正在检查当前加载的选项卡并检查 URL 是否是我们想要的 URL,如果它是我们想要的 URL,那么我们在 browser.tabs.onupdated 的帮助下在选项卡上执行一个 javascript 文件使用 browser.tabs.executeScript 的事件并且文件已成功执行,但内容脚本中存在的 window.onload 事件未执行,但第一行的控制台语句在内容脚本中执行

背景.js

 browser.tabs.onUpdated.addListener(
    function (tabId, changeInfo, tab) {
        // here checking wether to execute the script for the currently loading tab based on the URL of tab
        browser.tabs.executeScript(tab.id, { file: "jquery.min.js" });
         browser.tabs.executeScript(tab.id, { file: "automate.js" });
      
    },
    { properties: ["status"] }
  );

自动化.js

console.log("automate.js executing");
window.addEventListener("load",function(){
// this console.log statement not printed
 console.log("window is loaded");
})
4

1 回答 1

0

默认情况下,内容脚本运行在document_idle

文档及其所有资源已完成加载。

解决方案:

它与事件条件相同,load因此您不需要它。只需立即执行您需要的操作。

选择:

如果由于某种原因您需要在load事件之前和之后执行某些操作,您可以使用document_endDOMContentLoaded事件(DOM 已准备好,资源仍在加载)或document_start(DOM 为空,仅<html>解析节点)时运行脚本。

browser.tabs.executeScript(tab.id, { file: 'jquery.min.js', runAt: 'document_end' });
browser.tabs.executeScript(tab.id, { file: 'automate.js', runAt: 'document_end' });
于 2020-10-17T05:04:17.870 回答