【问题标题】:Chrome extension: content script to run on all pages, and another to only run on one pageChrome 扩展:内容脚本在所有页面上运行,另一个只在一个页面上运行
【发布时间】:2011-10-04 21:10:10
【问题描述】:

我正在编写一个需要执行以下操作的 Chrome 扩展程序:

  • 在弹出窗口触发时将内容脚本注入当前(任何)页面
  • 始终将不同的内容脚本注入特定域的所有页面

到目前为止,我已经实现了第一个,方法是在 popup.html 文件中调用 chrome.tabs.executeScript() 并在清单中添加以下内容以允许脚本在任何页面上运行:

"permissions": [
  "tabs", "http://*/*"
],

现在,根据http://code.google.com/chrome/extensions/content_scripts.html,如果我希望内容脚本始终在特定页面上运行,我必须在清单中声明它并设置权限以仅包含代码应该运行的页面。但是,这会破坏第一部分。

我该如何解决这个问题?我能想到的唯一方法是总是调用某种“调用者”脚本,然后它自己检查和加载其他脚本,但这看起来很混乱,我假设那里 必须做一个更好的方法。

【问题讨论】:

  • 感谢您修复标签!我不知道后一种存在:)

标签: google-chrome google-chrome-extension


【解决方案1】:
{
  "content_scripts": [
    {
      "matches": ["http://www.google.com/*"],
      "js": ["myscript.js"]
    }
  ],
  "permissions": [
     "tabs", "http://*/*"
  ]
}

myscript.js 会自动注入到 google.com,您仍然可以手动注入到http://*/*。

【讨论】:

  • 快速跟进问题 - myscript.js 无法访问与扩展的其余部分相同的 localStorage。如果设置了扩展程序中的特定选项(存储在 localStorage 中),我真的只想运行myscript.js...我该怎么做?
  • @Mala 您需要向后台页面发送请求,在那里读取 localStorage,然后将结果传回。见code.google.com/chrome/extensions/dev/messaging.html
  • 太棒了,谢谢,让它工作了 :) 我只希望 Firefox 扩展也一样容易制作
  • 记录了所有页面和方案“匹配”的替代方案:[“”],但我还没有让它工作...... :-(
猜你喜欢
  • 1970-01-01
  • 2018-07-25
  • 1970-01-01
  • 2023-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多