javascript - 检测以 HTML 表单目标 ="_blank"和不同域打开的窗口的关闭

标签 javascript html forms

出于某些原因,我需要使用原生 HTML 表单属性 target="_blank" 来在新窗口中显示表单响应。

我的 myDomain.com 中有以下 HTML 表单:

<form target="_blank" method="POST" action="http://www.anotherDomain.com/somePage">
  <input name="someFieldName" value="someValue"/>
  <button type="submit">Submit</button>
</form>

当用户单击提交时,浏览器中会出现一个窗口/选项卡,我无法控制来自anotherDomain.com 的表单响应。

如何检测_blank 窗口何时关闭?

如果使用 window.open(),我可以获得 child 的 window 引用,但它不合适,因为 window.open()会被浏览器拦截。

最佳答案

这是我的解决方案:

<!-- set form target to a specific name -->
<form target="windowName" method="POST" action="http://www.anotherDomain.com/somePage">
  <input name="someFieldName" value="someValue"/>
  <button type="submit">Submit</button>
</form>

<script>
var childWindow;

$('form').get(0).onsubmit = function () {
  // I think why window.open() here would not be blocked by browser because the function is attached to the HTML DOM and the event is triggered by user (mouse click)
  childWindow = window.open('', 'windowName');
};

var checkWindowClose = setInterval(function () {
  if (childWindow.closed) {
    alert('Window is closed');
    clearInterval(checkWindowClose);
  } else {
    // check the URL if childWindow has been redirected to somewhere
    try {
      // cross-origin exception will occur if the URL is in different domain
      if (childWindow.document.URL == 'something') {
        // ...
        clearInterval(checkWindowClose);
      }
    } catch (err) {
      // just ignore the error and do nothing
    }
  }
}, 1000);
</script>

关于javascript - 检测以 HTML 表单目标 ="_blank"和不同域打开的窗口的关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33388294/

相关文章:

javascript - vue.js:如何对对象的每个值进行 v 建模

javascript - 如何检查数组中的字符串是否包含二维数组中的两个或多个字符串?

javascript - 在 Firebase JavaScript 中计数

javascript - 使用jquery重命名特定范围内的表单元素

c# - ObjectDisposedException when .Show( )'ing a form that shouldn' t 被处理

javascript - Sails.js 项目中的嵌入式文档

html - Bootstrap (3.3.7) 移动导航栏元素(链接)不工作

javascript - 有没有一种 HTML 方式来指示属性值为 "temporary"(直到 Javascript 更改它)?

javascript - Bootstrap popover 不是第一次出现

php - 有没有办法从 2 个不同的表单插入数据并插入到列中的 1 行?