15

我创建了一个按预期工作的 Chrome 扩展程序,除了它仅在我加载与清单中的条件匹配的页面时执行。我已经尝试了几个小时通过单击扩展图标来使其执行无济于事。

我最接近我想要的是我已经能够使扩展图标单击以运行代码,但是它不会在加载的页面上运行它。它在扩展的空间而不是页面 DOM 上运行它。

在当前状态下,我的代码仅在指定域中的页面打开时运行。我只想在它匹配该规则时运行它,但只有当我单击扩展图标时。

这是我的代码: manifest.json



    {
        "name": "Get Response URL",
        "version": "1.0",
        "manifest_version": 2,
        "browser_action": {
        "default_icon": "mkto_icon.png",
        "name": "Click to get URL"
        },
        "content_scripts": [{
            "js": ["contentscript.js"],
            "matches": ["http://mydomain.com/*"]
        }]
    }

内容脚本.js



    if (document.getElementsByName("returnURL")){
        alert("\nThe Response URL on this form is:\n\n" + document.getElementsByName("returnURL")[0].value);
    }

4

2 回答 2

41

正如我所见,你想在什么时候运行代码

  • 用户点击了浏览器操作图标和
  • URL 模式是匹配的

如果是这样,您已将背景页面与 Tabs API 结合使用。

示范

这是您的用例的示例演示,您可以放置​​所有代码并为所有匹配 URL 分配权限。

清单.json

已注册背景页面、浏览器操作和目标页面的权限。

{
        "name": "Get Response URL",
        "version": "1.0",
        "manifest_version": 2,
        "browser_action": {
        "name": "Click to get URL"
        },
        "background":{
            "scripts":["background.js"]
        },
        "permissions":["https://www.google.co.in/*"] //Put All your URL here
 }

背景.js

将所有 Your Target Matching URL 放入一系列 if 条件中

chrome.browserAction.onClicked.addListener(function (tab) { //Fired when User Clicks ICON
    if (tab.url.indexOf("https://www.google.co.in/") != -1) { // Inspect whether the place where user clicked matches with our list of URL
        chrome.tabs.executeScript(tab.id, {
            "file": "contentscript.js"
        }, function () { // Execute your code
            console.log("Script Executed .. "); // Notification on Completion
        });
    }
});

内容脚本.js

alert("Code Executed ... ");

输出

当您浏览到https://www.google.co.in/并单击浏览器操作后,您会在页面中看到警报。

参考

于 2013-03-01T06:26:57.090 回答
1

使用 browserAction API,见这里

onClick 事件可能会对您有所帮助。还可以从谷歌查看这些示例

于 2013-03-01T03:29:17.570 回答