javascript - 在我的 chrome 扩展的其他选项卡中注入(inject)脚本时出错

标签 javascript google-chrome google-chrome-extension

这是我第一次尝试构建 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();
});

如果我将参数 i 更改为 null(当前选项卡),则一切正常。 看起来好像我没有权限或者参数有问题, 但我无法让代码工作。

有人能看出为什么代码不起作用吗?

提前致谢

最佳答案

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

但是,当您向其提供该可选整数时,您需要注意该整数不是选项卡在选项卡列表中的索引,而是其实际 ID(可以使用 tab[i].id 在你的情况下)。

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

关于javascript - 在我的 chrome 扩展的其他选项卡中注入(inject)脚本时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16649147/

相关文章:

javascript - 通过多个参数对 oberservableArray 进行排序

javascript - Joomla 不保存字段类型编辑器值

html - 段落前添加的空文本节点。为什么?

javascript - Chart.js Canvas 元素在 Chrome 60 中具有负高度和宽度

javascript - Dropbox + Chrome 扩展 Oauth 接收器

javascript - Chrome 扩展 - Notification.requestPermission() 不请求许可

javascript - 将 Parse JavaScript SDK 与 Google Chrome 应用程序结合使用

javascript - style.display = 'block' 在 div 上的 javascript 中不起作用

javascript - 如何检查 Mobile Chrome 浏览器中的 Data Saver 是否打开?

google-chrome-extension - 我们如何从 chrome 扩展执行 shell 命令;有提供的方法吗?