window.close()使用冻结的白色弹出窗口最小化Chrome,而不是关闭弹出窗口

时间:2014-03-23 09:54:16

标签: javascript google-chrome google-chrome-extension google-chrome-app

我写了一个Chrome扩展程序,在PC上工作得非常好。在Mac上测试时,我得到了一些奇怪的行为。 在某些情况下,我会在保持窗口打开的同时强制关闭弹出窗口。 (再次,在Windows上正常工作)。在Mac上执行此操作会将Chrome完全最小化到Dock。如果我再次打开Chrome,则会有一个白色的冻结弹出窗口不会关闭,直到Chrome重新启动。

我已经在Chrominuim搜索了类似的错误报告,但又回来了。

为了重现它,我把它缩小到了这个范围:

test.js

document.addEventListener('DOMContentLoaded', function ()
{
    window.close();  
});

的test.html:

<!DOCTYPE html>
<html>
    <head>
            <script src="test.js"></script>
    </head>
    <body >
        <a>testing</a>
     </body>
</html>

的manifest.json:

    {
  "name": "Test",
  "version": "1.0",
  "description": "None",
  "browser_action": {
    "default_title": "Test",
    "default_popup": "test.html"
  },
  "manifest_version": 2
    }

我也尝试过这样的事情:

var popups = chrome.extension.getViews({ type: "popup" });
    if (popups.length != 0) 
    {
      var popUpTest = popups[0];
      popUpTest.close();
    }

但得到了相同的结果。

如果我要添加此行:

setTimeout(function(){window.close()},1000); 

而不是

window.close();

弹出窗口将在大多数时间关闭,但看到弹出窗口大约一秒钟就会超过目的。似乎浏览器在实际关闭之前等待弹出窗口出现,如果它不在那里它将变得时髦并且将自己最小化。 我设法走得很远:

setTimeout(function(){window.close()},35);

但有时我仍然可以看到弹出窗口,有时浏览器会被最小化。绝对不是解决方案,但也许它可以帮助找到一个想法。

1 个答案:

答案 0 :(得分:-1)

虽然这肯定是Chrome中应该报告的错误,但我建议您切换到chrome.windows API。您可以使用API​​关闭当前窗口,如下所示:

chrome.windows.getCurrent(function(window) {
    var windowId = window.id;
    chrome.windows.remove(windowId);
});

当然,这是假设chrome.windows.getCurrent() 返回的Window对象具有 id。该字段在Window对象中是可选的,因此最好在早期提供代码(即初始创建窗口),以指定该窗口的id。