这是我第一次尝试构建 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/