Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/425.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Chrome扩展在X下一个选项卡上运行Javascript_Javascript_Jquery_Google Chrome_Google Chrome Extension - Fatal编程技术网

Chrome扩展在X下一个选项卡上运行Javascript

Chrome扩展在X下一个选项卡上运行Javascript,javascript,jquery,google-chrome,google-chrome-extension,Javascript,Jquery,Google Chrome,Google Chrome Extension,我正在做一个扩展,我不知道如何做下面的事情- “我的扩展”当前根据特定文本打开X个选项卡。现在,我希望它在打开的每个新选项卡中运行特定的脚本 Manifest.json: { "name": "Asaf Feedback Opener", "version": "1", "manifest_version" : 2, "description": "Opens any View Item on the current page", "background" : { "

我正在做一个扩展,我不知道如何做下面的事情- “我的扩展”当前根据特定文本打开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");
}
}
var links=document.getElementsByTagName(“a”);
numofiew=0;
对于(i=0;i
现在,在上面的JS中,它在一个新选项卡中打开链接。我希望下一个代码在前一个代码打开的每个选项卡中运行:

var soldlinks = document.getElementsByTagName("a");
for (i = 0; i < soldlinks.length; i++)
    {
    if (soldlinks[i].innerHTML.endsWith("sold"))
        {
        var soldlength = soldlinks[i].innerHTML.length
        var amount = soldlinks[i].innerHTML.substring(0,soldlength-5);
        if (Number(amount) >= 5)
            window.open(soldlinks[i].getAttribute("href"), "_self");
        else
            window.close()
            }
    }
var soldlinks=document.getElementsByTagName(“a”);
对于(i=0;i=5)
window.open(soldlinks[i].getAttribute(“href”),“_self”);
其他的
window.close()
}
}
实际上,我根本不懂JS或chrome扩展的编码语言,我一直在与谷歌一起即兴创作,以达到这一目的

两个脚本是分开工作的,我不知道如何从这里开始

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

    "permissions": ["<all_urls>", "tabs"]
    
  • event.js(为清晰起见,以前的background.js现在改名为):

    收集视图项。js:

    [...document.links]
        .filter(a => a.textContent.trim().startsWith('View Item'))
        .map(a => a.href);
    
    [...document.links]
        .filter(a => a.textContent.trim().endsWith('sold') && parseInt(a.textContent) >= 5)
        .map(a => a.href);
    
    收集售出物品。js:

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

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

    首先,非常感谢。至于collect-sell-items.js,我想让它知道href标题的长度,因为它总是在变化(1个卖出,17个卖出,631个卖出),我想让它知道它的长度并删除最后5个字母(“卖出”+它以前的空间),例如,当数字大于5时执行。这就是
    parseInt
    所做的:它从文本中提取第一个数字,不需要字符串操作。只需选中即可。它就像一个符咒!非常感谢你!最后一个问题——我希望它只打开同一URL的一个实例,这样我就不会得到重复的URL。我想到了一个循环,将它存储在一个带有if语句的数组中(如果它不匹配任何其他数组)。这是一个不同的问题,使用[google]搜索,类似这样: