我正在尝试创建一个Chrome扩展程序,它是Delicious书签的替代品。我知道已经有了扩展功能,但扩展的问题在于,在为网站添加书签后,弹出窗口保持打开状态(与使用小书签相反,弹出窗口在提交表单后自动关闭。我重新创建了扩展并遇到了同样的问题。
这是我的代码:
的manifest.json:
{
"name": "Delicious",
"version": "1.0",
"description": "Bookmark a site on Delicious",
"background_page": "background.html",
"permissions": [
"tabs"
],
"browser_action": {
"default_icon": "delicious.png"
},
"content_scripts": [
{
"matches": ["http://www.delicious.com/save*"],
"js": ["contentscript.js"]
}
]
}
background.html:
<html><script>
chrome.browserAction.onClicked.addListener(function(tab) {
chrome.tabs.getSelected(null, function(tab) {
w = window.open('http://delicious.com/save?url='+
encodeURIComponent(tab.url)+
'&title='+encodeURIComponent(tab.title)+
'&v=5&noui=1&jump=close',
'deliciousuiv5',
'location=yes,links=no,scrollbars=no,toolbar=no,width=550,height=550');
});
});
</script></html>
contentscript.js:
if (document.URL == 'http://www.delicious.com/save')
{
alert('closing...');
self.close();
alert('should have closed by now');
}
当我点击美味按钮时,弹出窗口很好,我可以保存书签但是在我点击“保存”后,弹出窗口没有关闭。两个警报都会显示,但self.close()
似乎没有做任何事情。当我删除contentcript.js中的URL检查时,弹出窗口正常显示,第一个警报立即触发,然后弹出窗口自行关闭(应该如此)。
为什么这不起作用? Chrome似乎没有阻止我做self.close()。美味做点什么吗?是别的吗?
如果您需要,文件就在这里:[链接已删除,因为drop.io已停业]
答案 0 :(得分:18)
尝试window.close()
,但这可能也无效。
在创建常规窗口(而不是浏览器操作弹出窗口)时,可以使用后台页面中的chrome.tabs.remove()
关闭它。您还可以从后台页面检测此窗口。类似的东西:
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
if(changeInfo.status == "loading") {
if(tab.url == "http://www.delicious.com/save") {
chrome.tabs.remove(tabId);
}
}
});
我不确定Chrome如何处理创建的窗口 - 作为标签或窗口。如果作为窗口,那么上面的代码将会有所不同。
答案 1 :(得分:9)
我找到了一个非常容易的工作。您只需将选中的选项卡设置为True,弹出窗口就会消失,就像这样...
// remove popup by selecting the tab
chrome.tabs.getSelected(null, function(tab) {
chrome.tabs.update(tab.id, { selected: true } )
});
答案 2 :(得分:0)
我找到了这个解决方案:chrome.tabs.update({ active: true });
这一行代码会关闭浏览器操作的弹出窗口。您甚至不需要在那里传递tab.id,因为默认情况下它被设置为当前选项卡的id。我在后台页面中运行它,但似乎它可以在扩展名中的任何地方运行。
答案 3 :(得分:0)
getSelected对我不起作用,所以我找到了此解决方案
chrome.tabs.create({url: 'https://www.google.com', active: false});
在background.js中,您只需要
window.close();