【问题标题】:Listen to event in another window在另一个窗口中收听事件
【发布时间】:2018-01-25 08:26:00
【问题描述】:

我使用var openedWindow = window.open(...) 创建了一个窗口。 我有一个函数应该监听 click 新窗口中按钮的事件,但它永远不会触发。

每当我点击btSearch按钮时,它应该打开另一个窗口并监听#submitButton点击事件。

 btSearch.Attributes["onclick"] = $@"
                                     var openedWindow = window.open(myUrl, "", "toolbar=no,menubar=no,personalbar=no,width=650,height=399,scrollbars=yes,resizable=yes");
                                     window.onModalExit(openedWindow);";

函数是aspx文件

function onModalExit(modalWindow) {
    $('#submitButton', modalWindow.document).ready(function () {
        modalWindow.document.getElementById('submitButton').addEventListener('click', function () {
           console.log('RETURNED CORRECTLY');
           alert('Now');
        });
    });
}

【问题讨论】:

  • 我不认为你可以附加到另一个窗口的事件,出于明显的安全原因,每个窗口都在一个专用的沙箱中。您必须在这两者之间设置一个通信系统,例如 websocket 或其他东西。
  • @sjahan 但是我有一个对该窗口的引用,我可以访问它的 DOM 并且$('#submitButton', modalWindow.document).ready 可以正常工作。只有click 不起作用。
  • ready 是有道理的,因为您订购了新页面的加载,但在那之后,该窗口中发生的事情将保留在该窗口中。否则,就会有太多的弱点,因为你可以像这样跨站点入侵每个网站。
  • 也许您可以将postMessage 与 iFrame 一起使用?我从未尝试过,但也许它可以在你的情况下完成这项工作!
  • 即使您拥有该窗口,但您不拥有该文档,除非它与打开器的域相同。

标签: javascript c# jquery webforms


【解决方案1】:

您可以通过window.opener.postMessage()函数将数据从打开的窗口发送到打开的窗口。

【讨论】:

    【解决方案2】:

    我认为解决您的要求的唯一解决方案是使用Sockets

    但为此,您显然需要某种后端。

    【讨论】:

      【解决方案3】:

      浏览器中的每个窗口都是“隔离的”,也就是说您无法以编程方式影响其他窗口。

      这只能由管理所有这些选项卡的浏览器来完成。或者也许通过为浏览器安装的扩展程序,我怀疑那些可能有能力在正在运行的页面中注入东西

      编辑:

      现在,由于无法以我所知道的任何方式直接完成,您可以:

      • 在要从中读取值的选项卡上创建轮询机制
      • 将值存储在某种服务器中(数据库、后端内存等)
      • 找到一种方法来关联某种 ID,以便您知道要查找的内容。

      因此,您将通过在 PageA -> BackEnd -> PageB 周围花很长时间来转移价值。

      我很自信地说你不能仅仅通过一个普通的页面来影响/读取另一个选项卡。在用户同意通过安装扩展程序授予权限后,您需要更高层的东西,例如浏览器本身,或者能够注入/检查页面的扩展程序。

      【讨论】:

      • 您知道是否还有其他方法可以做到这一点?我只需要得到一个值。
      • 一分钟后编辑不好。您是否“拥有”两个选项卡上的两个页面视图?我的意思是你能在他们两个中写代码吗?或者你想从别人的页面获取价值?
      • 是的,我拥有这两种观点。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-03
      • 2013-10-20
      • 2022-07-06
      • 1970-01-01
      相关资源
      最近更新 更多