【问题标题】:execute background scripts only once in my chrome extension在我的 chrome 扩展中只执行一次后台脚本
【发布时间】: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 加载时加载它。

标签: google-chrome-extension


【解决方案1】:

根据您的 cmets,您正在尝试注册一个侦听器,以了解 Chrome 何时启动并加载您的扩展程序。您可以通过 chrome.runtime.onStartup 事件实现此目的:

第一次安装此扩展的配置文件启动时触发。启动隐身配置文件时不会触发此事件,即使此扩展程序在“拆分”隐身模式下运行也是如此。

就这么简单:

chrome.runtime.onStartup.addListener(function () {
    /* Do some initialization */
});

【讨论】:

  • 将尽快更新您的进度。不过非常感谢。
  • 我一定忽略了 onStartup 功能。对此感激不尽。但正如你所说,通过绕过 DOMContentLoaded 功能,我无法实现我想要的。它肯定不适合这个问题。谢谢
  • 你让我很困惑:为什么你不能实现你想要的?
  • 没有。我把事情复杂化了。我已经把它分解了。 chrome.runtime.Startup 为我完成了这项工作:)
  • 我现在知道了 :) 很高兴听到这个消息!
猜你喜欢
  • 2012-05-09
  • 2023-03-10
  • 2017-03-12
  • 2018-04-11
  • 1970-01-01
  • 1970-01-01
  • 2016-09-09
  • 2013-07-12
  • 2012-08-24
相关资源
最近更新 更多