Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.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
Javascript 在my chrome扩展的其他选项卡中注入脚本时出错_Javascript_Google Chrome_Google Chrome Extension - Fatal编程技术网

Javascript 在my chrome扩展的其他选项卡中注入脚本时出错

Javascript 在my chrome扩展的其他选项卡中注入脚本时出错,javascript,google-chrome,google-chrome-extension,Javascript,Google Chrome,Google Chrome Extension,这是我第一次尝试构建chrome扩展。 我举了第一个例子,并根据我的需要将其主题化 我想建立一个chrome扩展,可以控制不同标签上的youtube播放器 从弹出菜单中 首先,我想显示所有打开的youtube选项卡的列表。这个很好用。 之后,我想在每个选项卡中插入一个脚本 这就是问题所在: 开发人员控制台给了我以下错误 Error during tabs.executeScript: Unknown error. sendRequest:22 chromeHidden.hand

这是我第一次尝试构建chrome扩展。 我举了第一个例子,并根据我的需要将其主题化

我想建立一个chrome扩展,可以控制不同标签上的youtube播放器 从弹出菜单中

首先,我想显示所有打开的youtube选项卡的列表。这个很好用。 之后,我想在每个选项卡中插入一个脚本

这就是问题所在: 开发人员控制台给了我以下错误

Error during tabs.executeScript: Unknown error.      sendRequest:22
    chromeHidden.handleResponse                      sendRequest:22
Callback worked 
我的manifest.json如下所示

{
  "manifest_version": 2,

  "name": "YoutubeMusicControl",
  "description": "First Try",
  "version": "1.0",

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

  "browser_action": {
    "default_icon": "icon.png",
    "default_popup": "popup.html"
  }
}
除了运行脚本外,popup.html没有任何特殊功能

这是有趣的部分

var TabControl = {

    listCurrentTabs : function(){
        var name = "";
        var div;

        chrome.tabs.query({}, function(tabs){

            for(var i = 0; i < tabs.length; i++){

                var found = tabs[i].url.search(/.*youtube.*/);

                if(found != -1){
                    div = document.createElement('div');

                    name = tabs[i].title;
                    div.className = "entry";
                    div.innerHTML = name;
                    document.body.appendChild(div);                  

                    chrome.tabs.executeScript(i,{
                        code:"alert('test');"
                    },function(results){console.log("Callback worked")});
                    }                    
                }
        });
    }
}

document.addEventListener('DOMContentLoaded', function () {
  TabControl.listCurrentTabs();
});
var TabControl={
listCurrentTabs:函数(){
var name=“”;
var-div;
chrome.tabs.query({},函数(tabs){
对于(变量i=0;i
如果我将参数i更改为null(当前选项卡),则一切正常。 看起来好像我没有权限或者参数有问题, 但是我不能让代码工作

有人知道为什么代码不起作用吗


提前感谢

您的答案在
executeScript
的参数中。如果您没有指定一个
tabID
,它默认为您当前的活动选项卡(这是当您将其输入
null
时发生的情况)

但是,当您输入该可选整数时,您需要知道该整数不是tablist中选项卡的索引,而是它的实际ID(在您的情况下,可以使用
tab[i].ID


使用选项卡的唯一ID将使代码正常工作。只需将
executeScript(i
更改为
executeScript(tabs[i].id

您的答案就在于
executeScript
的参数。如果您不指定
tabID
,它将默认为当前活动的选项卡(这是当您输入
null
时发生的情况)

但是,当您输入该可选整数时,您需要知道该整数不是tablist中选项卡的索引,而是它的实际ID(在您的情况下,可以使用
tab[i].ID


使用选项卡的唯一ID将使您的代码正常工作。只需将
executeScript(i
更改为
executeScript(选项卡[i]。ID

谢谢,这就是问题所在。:)可以很容易…祝您度过愉快的一天!谢谢,这就是问题所在。:)可以很容易…祝您度过愉快的一天!