错误注入脚本在其他选项卡在我的chrome扩展

Error injecting a script in others tabs in my chrome extension

本文关键字:我的 chrome 扩展 其他 注入 脚本 错误 选项      更新时间:2023-09-26

这是我第一次尝试建立一个chrome扩展。我选择了第一个例子,并根据我的需要修改了它。

我想建立一个chrome扩展,可以控制不同选项卡上的youtube播放器从弹出式菜单

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

这就是问题发生的地方:开发控制台显示以下错误

Error during tabs.executeScript: Unknown error.      sendRequest:22
    chromeHidden.handleResponse                      sendRequest:22
Callback worked 

我的清单。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"
  }
}

除了运行脚本之外,pop .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(当前选项卡),一切工作正常。看起来好像我没有权限或者参数有问题,但是我不能让代码工作。

有人知道为什么代码不能工作吗?

Thanks in advance

您的答案在executeScript的参数中。如果你没有指定一个tabID,它默认是你当前的活动选项卡(这就是当你给它null时发生的事情)。

然而,当您为它提供可选的整数时,您需要注意这个整数是,而不是表列表中选项卡的索引,而是它的实际ID(在您的情况下可以使用tab[i].id获得)。

使用选项卡的唯一ID将使您的代码工作。把executeScript(i改成executeScript(tabs[i].id