繁体   English   中英

如何在新打开的 chrome 选项卡上执行我的内容脚本?

[英]How to execute my content script on a newly opened chrome tab?

我正在从 Web 门户调用 Chrome 扩展程序以在新选项卡中打开 URL,并在新打开的选项卡上执行executeScript

清单文件

"externally_connectable": {
  "matches": ["http://localhost:3000/*"]
},
"permissions": ["tabs", "http://*/*", "https://*/*"]

背景.js

// listen to webportal
chrome.runtime.onMessageExternal.addListener(
  function(request, sender, sendResponse) {
    a = chrome.tabs.create({ url: request.openUrlInEditor });
    chrome.tabs.insertCSS(a.id, { file: "combined.css" });
    chrome.tabs.executeScript(a.id, { file: "combined.js" });
  }
);

如果我尝试在扩展单击时执行insertCSSexecuteScript ,它工作正常

背景.js

chrome.browserAction.onClicked.addListener(function(tab) {
  chrome.tabs.insertCSS(tab.id, { file: "combined.css" });
  chrome.tabs.executeScript(tab.id, { file: "combined.js" });
});

chrome.tabs.create不返回任何内容。

要使用创建的选项卡,您可以将方法包装在其回调中,该回调将创建的选项卡作为参数:

chrome.runtime.onMessageExternal.addListener(function(request, sender, sendResponse) {
    chrome.tabs.create({ url: request.openUrlInEditor }, function(tab) {
        chrome.tabs.insertCSS(tab.id, { file: "combined.css" });
        chrome.tabs.executeScript(tab.id, { file: "combined.js" });
    });
));

在向我的扩展manifest.json授予活动标签权限后,我自己解决了我的问题

    "permissions": ["tabs", "http://*/*", "https://*/*","activeTab"]

后台.js

// listen to webportal
chrome.runtime.onMessageExternal.addListener(
  function(request, sender, sendResponse) {
    chrome.tabs.create({ url: request.openUrl },function(tab) {
        chrome.tabs.insertCSS(tab.id, { file: "combined.css" });
        chrome.tabs.executeScript(tab.id, { file: "combined.js" });
    });
  }
);

内容.js

chrome.browserAction.onClicked.addListener(buttonClicked)
function buttonClicked(tab) {
   console.log("button clicked", tab)
   chrome.tabs.create({ url: LinkOfNewTab }, function(tab2) {
   console.log(tab2)
   extensionButtonClicked = true
})

}

背景.js

chrome.tabs.onUpdated.addListener(function(tabId,changeInfo,tab){
if (extensionButtonClicked) {
    if (tab.url === Link1) {
        chrome.tabs.executeScript(tab.id, {file: "content.js"} );
    }

    if (tab.url === Link2) {
        chrome.tabs.executeScript(tab.id, {file: "content2.js"} );
    }
}

});

说明

'chrome.browserAction.onClicked' event will listen for icon when you click and 'chrome.tabs.create' will open up a new code and 'chrome.tabs.onUpdated' will fire every time when page reload or new tab is opened.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM