23

我正在尝试创建一个Chrome扩展程序,它是Delicious小书签的替代品。我知道这里有一个扩展名,但扩展名的问题在于,在为网站添加书签后,弹出窗口保持打开状态(与使用小书签相反,弹出窗口在提交表单后自动关闭),我重新创建了延伸和遇到同样的问题Google Chrome扩展程序创建的关闭弹出窗口

这里是我的代码:

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()似乎没有任何操作。当我删除contentscript.js中的URL检查时,弹出窗口会正常显示,第一个警报会立即触发,然后弹出窗口会自动关闭(因为它应该)。

为什么不能正常工作?它似乎并不像Chrome阻止我做self.close()。美味做什么?还有别的吗?如果你想他们

的文件是在这里:[链接删除,因为drop.io歇业]

+0

该窗口会自动关闭。如果这有什么不同,我正在运行一个相当默认的Chrome版本。 – 2010-10-16 22:21:42

回答

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如何对待创建的窗口 - 作为选项卡或窗口。如果作为窗口,那么上面的代码会有点不同。

+0

完美的作品,谢谢。 – 2010-10-17 00:27:24

+8

window.close()的作品。如果您想在向另一个标签发送请求之后关闭弹出框,请确保关闭回调中的弹出窗口,并且必须至少发送一个空响应。 – 2012-02-08 21:47:08

9

我发现了一个非常简单的解决方法。您只需设置所选标签为真,并弹出消失,像这样...

// remove popup by selecting the tab 
chrome.tabs.getSelected(null, function(tab) { 
    chrome.tabs.update(tab.id, { selected: true }) 
}); 
+1

不适用于我。 – Nakilon 2012-12-12 07:38:00

+4

'chrome.tabs.getSelected'现在已经过时。 – 2013-07-26 20:40:47

0

我发现这个解决方案:chrome.tabs.update({ active: true });的这一行代码关闭浏览器操作的弹出窗口。你甚至不需要在那里传递tab.id,因为默认情况下它被设置为当前标签的id。我在后台页面运行它,但似乎它可以在扩展中的任何地方运行。

+0

这不幸没有为我工作。我从本页上发布的类似getSelected()代码进行更新,并且我编写了此代码,完全期望它能够从文档所说的内容开始工作。 – offthat 2013-09-16 01:40:45

+0

它可能取决于很多情况。你把这个方法的呼叫放在哪里?也许在一些没有调用的回调处理程序等等...... – 2013-09-16 10:47:55

+0

我结束了刚刚存储对弹出窗口的引用,这样我就可以调用popupRef.Close(),并且做到了这一点。 – offthat 2013-09-17 18:33:22

相关问题