Chrome扩展:如果找不到特定的选项卡,则执行一些代码
Chrome extension: Execute some code if a specific tab is not found
我正在开发一个chrome扩展,安装后它会遍历打开的选项卡,如果找不到所需的选项卡,我会打开一个新的选项卡。以下是我的代码:
var found = false;
chrome.tabs.getAllInWindow(null, function(tabs){
for (var i = 0; i < tabs.length; i++) {
var tabUrl = tabs[i].url;
if (tabUrl == 'http://www.youtube.com') {
chrome.tabs.update(tabs[i].id,{url:someUrl,selected:true});
found = true;
}
}
});
if (!found) {
window.open('https://www.youtube.com/watch?v=somevideid');
}
问题是,无论是否找到youtube,not found if条件始终返回true,并且打开默认视频URL的位置,因为只有在找不到youtube选项卡时才应该打开。我认为最后如果条件不在合适的位置,知道吗?
您应该使用chrome.tabs.query()
而不是chrome.tabs.getAllInWindow()
。如果使用空的queryInfo
对象调用.query
方法,则会找到所有选项卡。
所以,你的代码应该是这样的:
chrome.tabs.query({}, function(tabs) {
var found = false;
for (var i=0; i < tabs.length; i++) {
if (/https?:'/'/www'.youtube'.com/.test(tabs[i].url)) {
found = true;
chrome.tabs.update(tabs[i].id, {url: 'https://www.youtube.com/watch?v=somevideid', active: true});
break; // you found it, stop searching and update the tab
}
}
if (!found) chrome.tabs.create({url: 'https://www.youtube.com/watch?v=somevideid', active: true});
// you didn't find it, create a new tab with the new url and select it
});
此外,我使用正则表达式/https?:'/'/www'.youtube'.com/
来测试选项卡的url,因为url可能以"http"或"https"开头,或者可能附加了一些查询字符串,如"?hl=en"或类似的字符串,所以使用tab[i].url == "http://www.youtube.com/"
不会为您提供找到选项卡的绝对确定性。
相关文章:
- 有没有一种方法可以通过只引用JavaScript来执行代码
- jQuery在类更改时执行代码
- 如果此代码运行,请执行代码
- Javascript等待ajax成功后再执行代码
- 如何在onclick事件执行代码时在ImageButton上设置加载gif
- php,如果我点击按钮程序重新加载页面,并且从不继续执行代码
- Javascript渲染.如何编写Javascript;t在函数调用结束之前继续执行代码
- 无法让 jQuery 以正确的顺序执行代码
- ReactJS:在带有 ajax 调用的 .map() 语句完成后执行代码
- 从一个文本框执行代码,并在另一个文本框中以 HTML 显示输出
- 自执行代码中的“this”
- 为什么Javascript不按顺序执行代码
- 如何在javascript中连续执行代码
- 加载所有图像后执行代码
- 按下多个按钮时执行代码
- 如何在检索到数据后使用drawCallback执行代码
- 等待promise解析后再执行代码
- jQuery没有为具有新id的新元素执行代码
- 如何在客户端Collection增长时立即反应性地执行代码
- 如何将变量表达式转换为可执行代码(而不是替换值)