2

我正在写一个铬扩展,它应该能够在该页面加载后立即运行脚本。我实现了功能上的点击扩展图标运行的代码,但是当我添加代码运行网页上的脚本加载它不工作铬扩展在页面加载运行脚本

清单文件

{ 
    "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没有运行

回答

7

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

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

你会发现以下错误:

ERROR: Cannot access contents of url "...". Extension manifest must request permission to access this host.

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

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

此外,如果你忽略了tabId说法chrome.tabs.executeScript(...)它将应用于当前活动的标签(这可能会从解雇了一个推迟onUpdated事件)。因此,请进行以下更改:

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

我给了权限,但它仍然不工作 使用 “权限”:[“*:// */*”] 它应该为文件: // 但是当它没有给我想要的输出时,它甚至没有显示回调函数的输出 – mebjas

+0

@mebjas:查看我更新的答案,了解意外行为的另一个可能原因。如果它仍然不起作用,请检查控制台日志(更新标签的背景页面**和**)是否有任何错误。另外,使用'chrome.runtime.lastError'(如我的答案所示)来捕获任何注入错误。 – gkalpak

+0

感谢它的工作:) – mebjas

0

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

内容脚本不能使用Chrome * API的

+0

添加它以检查是否需要在每个页面上运行脚本。 但它不工作,即使我删除它@Prabu – mebjas