Chrome扩展程序代码vs内容脚本vs注入脚本

我正在尝试让我的Chrome扩展程序在init()加载新页面时运行该功能,但是在尝试了解如何执行此操作时遇到了麻烦。据我了解,我需要在background.html中执行以下操作:

  1. 使用chrome.tabs.onUpdated.addListener()来检查时,页面变更
  2. 使用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!");

}

回答:

Chrome扩展程序中的JavaScript代码可以分为以下几类:

  • 这包括背景页面,以及可以直接通过它访问的所有页面,例如浏览器弹出窗口。

  • ,完全访问页面DOM( 访问任何window对象,包括框架)。

    内容脚本在扩展名和页面之间的范围内运行。window内容脚本的全局对象不同于页面/扩展名的全局名称空间。

  • 注入的脚本(通过Content脚本中的此方法-完全访问页面中的所有属性。

    注入的脚本的行为就像页面本身包含的一样,并且不以任何方式连接到扩展。


在您的情况下,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();"});

}

});

以上是 Chrome扩展程序代码vs内容脚本vs注入脚本 的全部内容, 来源链接: utcz.com/qa/410003.html

回到顶部