Javascript 关闭由Google Chrome扩展创建的弹出窗口
我正在尝试创建一个Chrome扩展来替代DeliciousBookmarklet。我知道已经有一个扩展可以做到这一点,但该扩展的问题是,在您为站点添加书签后,弹出窗口保持打开状态(与使用bookmarklet不同,bookmarklet在提交表单后弹出窗口自动关闭。我重新创建了扩展,遇到了同样的问题 这是我的密码: manifest.json:Javascript 关闭由Google Chrome扩展创建的弹出窗口,javascript,google-chrome,google-chrome-extension,delicious-api,Javascript,Google Chrome,Google Chrome Extension,Delicious Api,我正在尝试创建一个Chrome扩展来替代DeliciousBookmarklet。我知道已经有一个扩展可以做到这一点,但该扩展的问题是,在您为站点添加书签后,弹出窗口保持打开状态(与使用bookmarklet不同,bookmarklet在提交表单后弹出窗口自动关闭。我重新创建了扩展,遇到了同样的问题 这是我的密码: manifest.json: { "name": "Delicious", "version": "1.0", "description": "Bookmark a si
{
"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"]
}
]
}
<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>
if (document.URL == 'http://www.delicious.com/save')
{
alert('closing...');
self.close();
alert('should have closed by now');
}
background.html:
{
"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"]
}
]
}
<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>
if (document.URL == 'http://www.delicious.com/save')
{
alert('closing...');
self.close();
alert('should have closed by now');
}
当我单击Delicious按钮时,弹出窗口显示良好,我可以保存书签,但单击“保存”后,弹出窗口不会关闭。两个警报都会显示,但是self.close()
似乎什么也没做。当我在contentscript.js中删除URL检查时,弹出窗口会正常出现,第一个警报会立即触发,然后弹出窗口会自动关闭(它应该关闭)
为什么这不起作用?看起来Chrome并没有阻止我做self.close()。Delicious在做什么吗?是其他什么吗
如果需要,这些文件就在这里:[由于drop.io停止工作而删除链接]请尝试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如何将创建的窗口视为选项卡或窗口。如果是窗口,则上面的代码会有点不同。尝试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是如何将创建的窗口视为选项卡还是窗口。如果是窗口,则上述代码会有点不同。我发现了一个非常简单的解决方法。您只需将所选选项卡设置为True,弹出窗口就会消失,如下所示
// remove popup by selecting the tab
chrome.tabs.getSelected(null, function(tab) {
chrome.tabs.update(tab.id, { selected: true } )
});
我发现了一个非常简单的解决方法。你只需将所选选项卡设置为True,弹出窗口就会消失,如下所示
// remove popup by selecting the tab
chrome.tabs.getSelected(null, function(tab) {
chrome.tabs.update(tab.id, { selected: true } )
});
我找到了这个解决方案:
chrome.tabs.update({active:true});
这一行代码关闭浏览器操作的弹出窗口。您甚至不需要在那里传递tab.id,因为默认情况下它被设置为当前选项卡的id。我在后台页面运行它,但它似乎可以在扩展中的任何地方运行。我找到了这个解决方案:chrome.tabs.update({active:true});
这一行代码关闭浏览器操作的弹出窗口。您甚至不需要在那里传递tab.id,因为默认情况下它被设置为当前选项卡的id。我在后台页面运行它,但它似乎可以在扩展中的任何地方运行。getSelected不适用于我,所以我找到了这个解决方案
chrome.tabs.create({url: 'https://www.google.com', active: false});
在background.js中,您只需要
window.close();
getSelected不适用于我,因此我找到了此解决方案
chrome.tabs.create({url: 'https://www.google.com', active: false});
在background.js中,您只需要
window.close();
窗口会自动关闭。如果有任何区别,我运行的是相当默认的Chrome版本。窗口会自动关闭。如果有任何区别,我运行的是相当默认的Chrome版本。window.close()有效。如果您想在向其他选项卡发送请求后关闭弹出窗口,请确保在回调中关闭弹出窗口,并且必须至少向选项卡发送一个空响应。是否可以从内容脚本关闭窗口?window.close()有效。如果您想在向其他选项卡发送请求后关闭弹出窗口,请确保在回调中关闭弹出窗口,并且该选项卡必须至少发送一个空响应。是否可以从内容脚本关闭窗口?
chrome.tabs.getSelected
现在已过时。chrome.tabs.getSelected
现在已过时。这不幸的是,它对我不起作用。我正在从类似的getSelected()进行更新代码发布在这个页面上,我写了这段代码,根据文档所说,我完全希望它能工作。这可能取决于许多情况。你把这个方法的调用放在哪里?可能在一些没有调用的回调处理程序中,等等…我只存储了对弹出窗口的引用,这样我就可以调用popupRef.Close()这就解决了问题。@offthat-你把引用存储在哪里了?我也想试试。不幸的是,这对我不起作用。我正在从类似的getSelected()更新代码发布在这个页面上,我写了这段代码,根据文档所说,我完全希望它能工作。这可能取决于许多情况。你把这个方法的调用放在哪里?可能在一些没有调用的回调处理程序中,等等…我只存储了对弹出窗口的引用,这样我就可以调用popupRef.Close()这就成功了-你把引用存储在哪里了?我也想试试这个。