Chrome扩展程序代码vs内容脚本vs注入脚本
我正在尝试让我的Chrome扩展程序在init()
加载新页面时运行该功能,但是在尝试了解如何执行此操作时遇到了麻烦。据我了解,我需要在background.html中执行以下操作:
- 使用
chrome.tabs.onUpdated.addListener()
来检查时,页面变更 - 使用
chrome.tabs.executeScript
运行的脚本。
这是我的代码:
//background.htmlchrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
chrome.tabs.executeScript(null, {code:"init();"});
});
//script.js
function init() {
alert("It works!");
}
回答:
Chrome扩展程序中的JavaScript代码可以分为以下几类:
这包括背景页面,以及可以直接通过它访问的所有页面,例如浏览器弹出窗口。
,完全访问页面DOM( 访问任何
window
对象,包括框架)。内容脚本在扩展名和页面之间的范围内运行。
window
内容脚本的全局对象不同于页面/扩展名的全局名称空间。注入的脚本(通过Content脚本中的此方法-完全访问页面中的所有属性。
注入的脚本的行为就像页面本身包含的一样,并且不以任何方式连接到扩展。
在您的情况下,chrome.tabs.onUpdated
可能会在script.js
评估内容脚本之前调用后台页面()中的代码。因此,您会得到一个ReferenceError
,因为init
不是。
另外,在使用时chrome.tabs.onUpdated
,请确保测试页面是否已完全加载,因为该事件会触发两次:加载前和完成时:
//background.htmlchrome.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();"});
}
});
以上是 Chrome扩展程序代码vs内容脚本vs注入脚本 的全部内容, 来源链接: utcz.com/qa/410003.html