Chrome扩展程序在X下一个标签上运行Javascript

我正在进行扩展,我无法理解如何执行以下操作 – 根据特定文本,我的扩展程序当前打开了X个选项卡。 现在我希望它在它打开的每个新选项卡中运行特定的脚本。

manifest.json的:

{ "name": "Asaf Feedback Opener", "version": "1", "manifest_version" : 2, "description": "Opens any View Item on the current page", "background" : { "scripts" : ["background.js"] }, "browser_action": { "default_icon": "icon.png" }, "permissions": ["activeTab", "tabs"] } 

现在它在当前单击的页面中运行以下代码:

 chrome.browserAction.onClicked.addListener(function(tab) { chrome.tabs.executeScript(null, {file: "testScript.js"}); }); 

使用Javascript:

 var links = document.getElementsByTagName("a"); numofview = 0; for (i = 0; i < links.length; i++) { if (links[i].innerHTML.startsWith("View Item")) { numofview = numofview+1; window.open(links[i].getAttribute("href"), "_blank"); } } 

现在,在上面的JS中,它在新选项卡中打开链接。 我希望下一个代码在前面的代码打开的每个选项卡中运行:

 var soldlinks = document.getElementsByTagName("a"); for (i = 0; i = 5) window.open(soldlinks[i].getAttribute("href"), "_self"); else window.close() } } 

我实际上根本不知道JS或chrome扩展编码语言,我一直在谷歌即兴创作。

这两个脚本分开工作,我不怎么从这里开始。

  1. 通过将数据保留为文件中的最后一个表达式,使注入的内容脚本仅收集URL并将URL返回到后台页脚本(请参阅下面的代码)。 它将在executeScript的回调参数中提供,该参数是选项卡中每个帧的结果数组,因此我们的数据位于其元素0内(主框架为0 =页面本身)。
  2. 后台页面脚本将打开选项卡并使用executeScript将新内容脚本注入打开的选项卡。 如果您不知道可能引用哪些网站,则需要在manifest.json中为已打开的网站或所有url提供其他权限:

     "permissions": ["", "tabs"] 
  3. 使用不使用扩展程序时自动卸载的事件页面 。

     "background" : { "scripts" : ["event.js"], "persistent": false }, 

event.js (之前为了清晰起见,现在将background.js重命名):

 chrome.browserAction.onClicked.addListener(collectViewItems); function collectViewItems(tab) { chrome.tabs.executeScript(tab.id, {file: 'collect-view-items.js'}, results => { results[0].forEach(openViewItem); }); } function openViewItem(url) { chrome.tabs.create({url, pinned: true, active: false}, collectSoldItems); } function collectSoldItems(tab) { chrome.tabs.executeScript(tab.id, {file: 'collect-sold-items.js'}, results => { chrome.tabs.remove(tab.id); results[0].forEach(openSoldItem); }); } function openSoldItem(url) { chrome.tabs.create({url, active: false}); } 

收集-视图- items.js:

 [...document.links] .filter(a => a.textContent.trim().startsWith('View Item')) .map(a => a.href); 

收集出售,items.js:

 [...document.links] .filter(a => a.textContent.trim().endsWith('sold') && parseInt(a.textContent) >= 5) .map(a => a.href); 

使用ES2015语法,默认情况下在现代浏览器中可用。