我还没有完全能够将这个问题排除在外,因为其他人在Chrome上报告成功,但我已经在Chrome 44中重现了这个问题,而不是在Firefox 33.1中。打开隐身模式(即没有扩展名),并在弹出窗口阻止程序设置中进行豁免无效。
我有一个带表单的弹出窗口,表单的目标是_blank
。目的是表单提交将转到父窗口中的新选项卡。然后弹出窗口自行关闭。
但是,除非我删除代码以使弹出窗口自行关闭,否则新选项卡不会打开。
我想我会在某处触发弹出式预防(特别是因为我无法通过本地file:///
网址重播;只能使用远程内容),但我还没有能够找出为什么在提交后关闭弹出窗口会破坏提交本身。我无法在开发者控制台中看到任何相关内容。
我也试过,而不是onsubmit
,添加到提交按钮onclick="setTimeout('window.close()',1);return true;"
,效果相同;事实上,这是我尝试调试的应用程序中实际发现的可怕代码。
发生了什么?
这是一个可怕的独立测试用例,可以重现问题。
var trigger = null;
var popup = null;
window.onload = function() {
trigger = document.getElementById('trigger');
trigger.onclick = function() {
popup = window.open('', 'thePopup', 'width=450,height=450');
if (popup == null) {
console.error("Failed to open popup window :(");
}
else {
populatePopup();
}
};
};
function populatePopup() {
popup.document.write('<html><body>');
popup.document.write('<form method="GET" action="http://google.com/?q=test" target="_blank" onsubmit="window.close()">');
popup.document.write('<input type="submit" value="Click here now" />');
popup.document.write('</form>');
popup.document.write('</body></html>');
}
&#13;
<a href="#" id="trigger">Click here</a>
&#13;
(可悲的是,由于弹出因素,这个片段根本不会运行,至少不会在我的浏览器中运行。但是,帧内容可以逐字复制/粘贴到要测试的文件中。)