在我的chrome扩展程序中的其他选项卡中注入脚本时出错

时间:2013-05-20 12:05:24

标签: javascript google-chrome google-chrome-extension

这是我第一次尝试构建chrome扩展。 我拿了第一个例子并根据我的需要进行了调整。

我想构建一个可以在不同标签上控制youtube播放器的Chrome扩展程序 从弹出菜单中。

首先,我想显示所有打开的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();
});

如果我将参数i更改为null(当前选项卡),则每个方法都可以正常工作。 看起来好像我没有权限或参数有问题, 但我不能让代码工作。

有人可以看到代码无效的原因吗?

提前致谢

1 个答案:

答案 0 :(得分:3)

您的答案取决于executeScript的参数。如果您没有指定tabID,则默认为当前有效标签(这是您在提供null时发生的情况)。

但是,当你为它提供可选整数时,你需要知道这个整数是 tablist中选项卡的索引,但它的实际ID(可以使用{{获取) 1}}在你的情况下)。

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

即可