【发布时间】:2014-04-30 14:55:26
【问题描述】:
我编写了一个在 PC 上运行良好的 Chrome 扩展程序。在 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);
但有时我仍然可以看到弹出窗口,有时浏览器会被最小化。绝对不是一个解决方案,但也许它可以帮助你找到一个想法。
【问题讨论】:
-
您应该在crbug.com/new 上提交一个新错误。您还应该删除“content_scripts”部分,因为我相信它会在 DOMContentLoaded 触发后注入内容脚本,因此不会做任何事情,但它会让调查您的错误的人感到困惑。
-
@JeffreyYasskin 内容脚本根本不会注入扩展页面,因此可以完全删除。事实上,权限部分也可以删除,因为它们也不相关。
-
@JeffreyYasskin 我最终会提交一份错误报告。想确保这是我面临的错误。
-
@RobW 你们都是对的。我更新了我的问题并删除了不必要的代码,并用一些新发现对其进行了更新。
-
@Segev 有什么解决方法,您可以最小化弹出窗口,然后关闭窗口,如有必要,将其放在主窗口后面。
标签: javascript google-chrome google-chrome-extension google-chrome-app