chrome扩展 - 页面重定向后的chrome.tabs.executeScript

时间:2016-04-20 06:17:38

标签: javascript google-chrome-extension

我尝试制作一个Google Chrome扩展程序,在点击扩展程序图标时注入脚本。但是,我想在加载/转到另一个页面时注入相同的脚本,而不必再次单击扩展图标。

background.js

chrome.browserAction.onClicked.addListener(function (tab) {
 if (tab.url.startsWith("https://")){ 
    chrome.tabs.executeScript(tab.id, {
        "file": "js/contentscript.js"
    }, function () {
        console.log("Script Executed .. "); // Notification on Completion
    });
 }
 else{
    alert('Error');
 }
});

manifest.json 我想在browserAction上执行脚本,所以在content_scripts上添加脚本不是我想要追求的选项

"permissions": ["tabs", "windows", "notifications", "activeTab"],
"version": "2.0",
"browser_action": 
{
    "name": "Click to activate extension",
    "default_icon": "images/icon.png",
},
"background":
{
    "scripts":["js/background.js"]
},
"icons":
{
    "16": "images/icon16.png",
    "48": "images/icon48.png",
    "128": "images/icon128.png"
},
"content_scripts": 
[{
    "js": ["js/jquery-2.1.4.min.js"],
    "matches": [ "https://*/*" ],
    "run_at": "document_end"
}]

contenscript.js - 只是一个示例脚本,但我的观点是

alert("here");
setTimeout(function(){window.open("www.google.com");});

P.S。这是我第一次在stackoverflow中提问,请对我温柔。 :d

1 个答案:

答案 0 :(得分:3)

您可以收听webNavigation.onCompleted事件,该事件在文档(包括其引用的资源)被完全加载和初始化时触发。

tabs.onUpdated事件相比,您可以使用event filters来限制事件通知。对于本部分,您可以在此帖Running an extension in background on page load/refresh中查看我的答案以获取更多详细信息。

的manifest.json

{
    "name": "36735306",
    "version": "1.0",
    "description": "Your description here",
    "manifest_version": 2,
    "background": {
        "scripts": ["background.js"]
    },
    "web_accessible_resources": ["content.js"],
    "permissions": [
        "webNavigation",
        "<all_urls>"
    ]
}

background.js

chrome.webNavigation.onCompleted.addListener(function(details) {
    if(details.frameId === 0) {
        chrome.tabs.executeScript(details.tabId, {"file": "content.js"}); 
    }
});