【发布时间】:2023-03-13 21:09:02
【问题描述】:
我正在开发一个 chrome 扩展。每次我重新加载页面或打开新标签时都会调用我的脚本。我如何使它只加载一次扩展,即当 chrome 启动并将所有值重置为浏览器关闭时的默认值。
我确实浏览了 stackoverflow 中的大部分链接,但无法将其重点放在我的情况。
manifest.json
"background":{
"scripts":["common.js","example.js"],
"persistent":true
},
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["myscript.js"]
}
],
"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'",
"permissions": ["http://*/*",
"https://*/*",
"contextMenus",
"tabs"]
在我的一个后台 javascript 中,我正在触发一个事件:
example.js
var DOMContentLoaded_event = document.createEvent("Event");
DOMContentLoaded_event.initEvent("DOMContentLoaded", true, true);
window.document.dispatchEvent(DOMContentLoaded_event);
上面的代码是为了触发DONContent,这样用户每次启动Chrome浏览器时都不需要点击扩展图片。
每次我的页面加载时都会调用触发事件,无论是重新加载 同一页面或打开另一个选项卡,该事件被调用。我知道我在这里遗漏了一些重要的东西。我确实在 localStorage 中进行了设置。没有工作(我的意思是,该事件在刷新网页时被调用)。我确实尝试了 "persistent": true 选项,但没有成功。
我能知道我错过了什么吗?
尼基尔
【问题讨论】:
-
不是很清楚你在问什么。你想触发
DOMContentLoaded事件,但是在哪里你想触发它(背景页面,内容脚本)? 什么时候你想触发它(每次加载新页面时)? 为什么你想触发它(为什么不监听“真实的”DOMContentLoaded事件)? -
我在我的后台 javascript 中触发了 DOMContentLoaded 事件,我希望它只在我加载我的 chrome 浏览器时加载一次。我可能在加载时出错了。我该如何改变才能实现这一目标?
-
为什么要手动触发事件?该事件由浏览器触发。但请注意,非持久性背景页面会频繁加载和卸载。
-
我已经集成了一个我在辣椒链接上找到的 NACL 示例。在那,发生的第一个事件是,用户必须点击扩展图像。单击将触发整个 NACL 应用程序。但我绕过点击并在 Chrome 加载时加载它。