这是我第一次尝试构建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(当前选项卡),则每个方法都可以正常工作。 看起来好像我没有权限或参数有问题, 但我不能让代码工作。
有人可以看到代码无效的原因吗?
提前致谢
答案 0 :(得分:3)
您的答案取决于executeScript
的参数。如果您没有指定tabID
,则默认为当前有效标签(这是您在提供null
时发生的情况)。
但是,当你为它提供可选整数时,你需要知道这个整数是不 tablist中选项卡的索引,但它的实际ID(可以使用{{获取) 1}}在你的情况下)。
使用选项卡的唯一ID可使您的代码正常工作。只需将tab[i].id
更改为executeScript(i