我写了一个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);
但有时我仍然可以看到弹出窗口,有时浏览器会被最小化。绝对不是解决方案,但也许它可以帮助找到一个想法。
答案 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。