【问题标题】:chrome extension to run script on page loadchrome 扩展在页面加载时运行脚本
【发布时间】:2013-11-27 22:56:43
【问题描述】:

我正在编写一个 chrome 扩展程序,它应该能够在加载后立即在该页面上运行脚本。我实现了在单击扩展图标时运行代码的功能,但是当我添加代码以在页面上运行该脚本时,它无法正常工作

清单文件

 {
  "name": "",
   "description": "",
   "version": "1.0",

   "permissions": [
     "activeTab",
     "tabs"
    ],
   "background": {
    "scripts": ["background.js"],
    "persistent": false
    },
   "browser_action": {
      "default_title": "",
  "default_icon": "6a00e3982283618833019affd3c028970c.png"
   },
  "manifest_version": 2
  }

js 文件:

chrome.tabs.onUpdated.addListener(
  function ( tabId, changeInfo, tab )
  { 
    if ( changeInfo.status === "complete" )
    {
      chrome.tabs.executeScript({
      code: "console.log('dsff');"
    });
  }
});

但尽管如此,当用户更改选项卡中的页面时,我的 js 没有运行

【问题讨论】:

    标签: javascript google-chrome-extension google-chrome-devtools


    【解决方案1】:

    如果您向 chrome.tabs.executeScript(...) 注册了回调以捕获任何错误,例如:

    chrome.tabs.executeScript({ code: "console.log('dsff');" }, function() {
        if (chrome.runtime.lastError) {
             console.log("ERROR: " + chrome.runtime.lastError.message);
        }
    });
    

    您会注意到以下错误:

    错误:无法访问 url “...”的内容。扩展清单必须请求访问此主机的权限。

    因此,您需要将适当的 host match pattern 添加到清单中的 permissions 列表中。例如。能够将代码注入任何http/https 页面:

    "permissions": ["*://*/*"]
    

    此外,如果您省略 chrome.tabs.executeScript(...)tabId 参数,它将应用于当前活动的选项卡(这可能与触发 onUpdated 事件的选项卡不同)。因此,还要进行以下更改:

    chrome.tabs.executeScript(tab.id, { code: "console.log('dsff');" }, function() {...
    

    【讨论】:

    • 我给予了许可,但它仍然无法使用 "permissions": ["://*/"] 它应该适用于 file:// 但是当它没有给我想要的输出,它甚至没有显示回调函数的输出
    • @mebjas:请参阅我更新的答案,了解导致意外行为的另一个可能原因。如果仍然无法正常工作,请检查控制台日志(背景页面和更新选项卡的)是否有任何错误。另外,使用chrome.runtime.lastError(如我的回答所示)来捕获任何注入错误。
    【解决方案2】:

    首先,您为什么对内容和后台脚本使用相同的文件 (background.js)。

    内容脚本不能使用 chrome.* api's

    【讨论】:

    • 添加它以检查是否需要使脚本在每个页面上运行。但即使我删除它也不起作用@Prabu
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-25
    相关资源
    最近更新 更多