将表单从弹出窗口提交到新选项卡,然后关闭弹出窗口,可以防止表单提交

时间:2015-08-26 11:05:08

标签: javascript html forms popup

我还没有完全能够将这个问题排除在外,因为其他人在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;
&#13;
&#13;

(可悲的是,由于弹出因素,这个片段根本不会运行,至少不会在我的浏览器中运行。但是,帧内容可以逐字复制/粘贴到要测试的文件中。)

0 个答案:

没有答案