我试图让我的Chrome扩展在加载新页面时运行函数init()
,但我在尝试理解如何做到这一点时遇到了麻烦。据我所知,我需要在background.html中执行以下操作:
chrome.tabs.onUpdated.addListener()
检查页面何时更改chrome.tabs.executeScript
运行脚本。这是我的代码:
//background.html
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
chrome.tabs.executeScript(null, {code:"init();"});
});
//script.js
function init() {
alert("It works!");
}
我还想知道init()函数是否可以访问位于其他JS文件中的其他函数--
发布于 2012-03-29 05:41:34
Chrome扩展中的JavaScript代码可以分为以下几组:
这包括background page以及可以通过chrome.extension.getBackgroundPage()
直接访问它的所有页面,例如browser pop-ups.
chrome
API的 访问,完全访问页面的DOM (不是对任何window
对象,包括框架)。内容脚本在扩展和页面之间的作用域中运行。内容脚本的全局window
对象不同于页面/扩展的全局namespace.
chrome.*
API。注入的脚本的行为就像它们是由页面本身包含的一样,并且没有以任何方式连接到扩展。有关各种注入方法的详细信息,请参阅this post。
要将消息从注入脚本发送到内容脚本,必须使用事件。有关示例,请参阅this answer。注意:在扩展中从一个上下文到另一个上下文传输的消息是自动(JSON)、-serialised和解析的。
在您的示例中,后台页面(chrome.tabs.onUpdated
)中的代码很可能是在计算内容脚本script.js
之前调用的。所以,你会得到一个ReferenceError
,因为init
不是。
此外,在使用chrome.tabs.onUpdated
时,请确保测试页面是否完全加载,因为该事件会触发两次:加载前和完成时:
//background.html
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
if (changeInfo.status == 'complete') {
// Execute some script when the page is fully (DOM) ready
chrome.tabs.executeScript(null, {code:"init();"});
}
});
https://stackoverflow.com/questions/9915311
复制相似问题