我正在编写Google Chrome扩展程序的过程中,我对应该是一项非常简单的任务而挂了我。我有一个浏览器操作,可以打开弹出窗口" popup.html",然后加载一个小的JavaScript文件," popup.js"。一旦我从弹出页面中获得domcontentload的信号,我的JavaScript就会打开一个带有某个URL的新选项卡。这种行为怪癖是设计的 - 在某些情况下,它将显示菜单,在其他情况下,它将打开此URL。
我目前有一些非常简单的代码,应该这样做,但是每当打开此选项卡时,Chrome都会突然关闭。我使用的是Mac(OS X Mavericks),因此它不会完全崩溃(仍在运行),窗口只是关闭。当我再次打开它时,它应该打开的标签在那里,但是" popup.html"菜单尴尬地挂在UI上,不会消失。
这是我完整的popup.js文件:
function stuff() {
window.open("http://stackoverflow.com/");
}
document.addEventListener('DOMContentLoaded', stuff);
我猜想,我可能需要在转到此链接或其他内容之前优雅地关闭弹出窗口,但这似乎我正在思考它。毕竟,我看到了其他扩展程序在其浏览器动作弹出窗口中具有正常链接的扩展,您可以单击这些扩展名,而无需任何JavaScript魔术打开新标签。
我也尝试使用chrome.tabs.create函数,但同样的事情也会发生。Chrome Developer Console不会显示任何错误。想法?
edit1:只是禁用所有扩展名,然后再次尝试。仍在打破。要启动我的Windows 8框,看看会发生什么。
edit2:在Mac上打开窗口之前,请短暂延迟,请参见下面的答案。
好吧,我想我可能已经弄清楚了,但这仍然很奇怪。我在Windows 8 PC上进行了此操作,并且浏览器没有崩溃,但是浏览器动作弹出窗口并未按照应该的方式关闭。
在直觉上,我在Mac上更改了代码,以给浏览器一些时间渲染弹出窗口:
function stuff() {
window.open("http://stackoverflow.com/");
}
setTimeout(stuff, 500);
这次在Mac上没有问题。我猜这是浏览器在渲染弹出窗口时被打断的问题,但这仍然很奇怪。我仍然会感激真正知道这里发生了什么的人的解释!: - )