我创建了Google Chrome浏览器操作扩展。它不需要使用弹出页面。 它有一个持续分析页面源数据的后台持久化进程/页面。但是,这是一个单独的过程,我不想在后台执行UI编程注入,就像官方的例子。如何使用内容脚本进行onClicked程序化注入?
我设计了在用户页面顶部动态生成UI(结果)的脚本,当点击Action图标时需要显示该脚本。我需要使用内容脚本来完成这个程序化注入,而不是后台或弹出页面。
但它不起作用,因为内容脚本是一个'孤岛',不能与其他扩展进行通信,并且没有对Chrome浏览器的完全访问权限。因此,在内容脚本使用下面的代码时:
chrome.extension.sendMessage({}, function(response) {
var readyStateCheckInterval = setInterval(function() {
if (document.readyState === "complete") {
clearInterval(readyStateCheckInterval);
chrome.browserAction.onClicked.addListener(function(tab) {
chrome.tabs.executeScript(null, {file: "content_script.js"}); }
这是我的清单文件的一部分:
"background": {
"scripts": [
"src/bg/background.js"
],
"persistent": true
},
"page_action": {
"default_icon": "icons/icon19.png",
"default_title": "Show my visitors"
},
"permissions": [
"*://*.google.com/*",
"background"
],
"content_scripts": [
{
"matches": [
"*://*.google.com/*"
],
"js": [
"src/inject/inject.js"
]
}
]
它不起作用,因为内容脚本pressumably没有访问browserAction.onClicked方法。当使用内容脚本单击动作扩展图标时,我确实需要进行编程式注入。有什么建议么?
谢谢@Xan。我将使用消息传递接口从后台侦听器向内容脚本发送通知,无论何时单击图标以激活注入的脚本。 – 2015-02-09 15:08:50
请考虑其含义:如果内容脚本始终被注入但很少被激活,这意味着您总是使用一些资源,例如匹配的每个选项卡的内存。如果内容脚本不做别的事情,那么切换到PI可能是值得的。 – Xan 2015-02-09 15:11:21
当然,正如我在我的文章中指出的那样,程序注入是我需要的方式。自动注入内容脚本的清单文件仅供参考。谢谢 – 2015-02-09 16:03:26