为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕桂英4014372 2019-07-23 18:00:06
Chrome扩展程序代码与内容脚本与注入脚本我试图让我的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.jsfunction init() {     alert("It works!");}我也想知道init()函数是否可以访问其他JS文件中的其他函数?
查看完整描述

2 回答

?
慕容森

TA贡献1853条经验 获得超18个赞

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

  • 扩展代码 - 对所有允许的chrome.*API的完全访问权限。
    这包括后台页面,并且必须通过直接访问的所有页面chrome.extension.getBackgroundPage(),如浏览器弹出窗口

  • 内容脚本(通过清单文件或chrome.tabs.executeScript) - 部分访问某些chromeAPI,完全访问页面的DOM(包括任何window对象,包括框架)。
    内容脚本在扩展和页面之间的范围内运行。window内容脚本的全局对象与页面/扩展的全局命名空间不同。

  • 注入脚本(通过内容脚本中的此方法) - 对页面中所有属性的完全访问权限。无权访问任何chrome.*API。
    注入的脚本的行为就像页面本身包含它们一样,并且没有以任何方式连接到扩展。请参阅此文章以了解有关各种注射方法的更多信息。

要将注入的脚本中的消息发送到内容脚本,必须使用事件。请参阅此答案以获取示例。注意:在一个扩展中从一个上下文传输到另一个上下文的消息会自动(JSON)进行序列化和解析


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


查看完整回答
反对 回复 2019-07-23
  • 2 回答
  • 0 关注
  • 1026 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号