【问题标题】:How to stop content script from starting itself如何阻止内容脚本自行启动
【发布时间】:2019-12-07 02:32:12
【问题描述】:

我的 manifest.json 匹配每个 URL。因此,只要在 Chrome 中打开 URL,就会激活内容脚本。

当前程序:

(1) 我的后台脚本将当前的空 URL 更新为某些内容。

(2) 我的内容脚本已激活,因为它是 manifest.json 中的匹配项。我的内容脚本需要访问同一网站上的多个 URL。它单击链接并返回(= 一个选项卡中的所有内容)-> 内容脚本再次调用自身,因为打开了另一个 URL。

问题:

我不希望内容脚本多次调用自身。例如,它应该仅在从后台脚本收到新 URL 已打开的消息时才激活。

想法:

chrome.windows.onCreated.addListener(function()) 是我在后台脚本中的所有代码。我正在寻找的内容脚本是否有类似的东西?

可能是这样的:

  • window.addEventListener
  • browser.runtime.onMessage.addListener
  • browser.runtime.sendMessage
  • browser.runtime.onMessage
  • browser.tabs.sendMessage()

但我不明白如何正确使用它们。

【问题讨论】:

  • 从 manifest.json 中完全删除“content_scripts”部分并改用programmatic injection
  • 所以我不会有内容脚本的 .js 并将所有内容放在 background.js 中?
  • 不,您将有两个脚本,请参阅我链接的文档。

标签: javascript google-chrome-extension


【解决方案1】:

在您的后台脚本中,执行以下操作:

chrome.windows.onCreated.addListener(function(tab) {
    let msg = {txt: "execute"};
    chrome.tabs.sendMessage(tab.id, msg);
};

然后在您的内容脚本中,您可以通过以下方式截取此消息:

chrome.runtime.onMessage.addListener(function(msg){
    if(msg.txt == "execute") {
        doSomething();
    }
});

文档在这里。 https://developer.chrome.com/extensions/runtime#method-sendMessage https://developer.chrome.com/extensions/runtime#event-onMessage

【讨论】:

  • 谢谢!不过,内容脚本现在不会激活。
  • @aj93 你能把你的完整脚本贴在某个地方吗?查看控制台日志是否抛出任何东西,并确保包已更新且未缓存
猜你喜欢
  • 1970-01-01
  • 2014-06-04
  • 1970-01-01
  • 2018-05-20
  • 1970-01-01
  • 2018-10-22
  • 1970-01-01
  • 1970-01-01
  • 2020-04-29
相关资源
最近更新 更多