window.opener.dispatchEvent 不会在 Firefox 中传输附加的数据

window.opener.dispatchEvent doesn't transfer attached data in Firefox

本文关键字:传输 数据 Firefox dispatchEvent opener window      更新时间:2023-09-26

客户请求的工作流程是这样的:

注册表单上的用户单击一个按钮,打开另一个窗口:

$ ->
  $("a.popup").on 'click', (e) ->
    e.preventDefault()
    newWindowCenter($(this).attr("href"), $(this).attr("data_width"), $(this).attr("data_height"), "authPopup")

哪里

newWindowCenter = (url, width, height, name) ->
  left = (screen.width / 2) - (parseInt(width) / 2);
  top = (screen.height / 2) - (parseInt(height) / 2);
  window.addEventListener("dataAvailable", transferAccountData, false)
  window.open(url, name,
"menubar=no,toolbar=no,status=no,width="+width+",height="+height+",alwaysRaise=yes,toolbar=no,left="+left+",top="+top)

在这个新窗口中,他得到了一些数据,他通过单击按钮来确认这些数据的使用情况,因此:

$(".confirm_data_usage").on 'click', (e) ->
    e.preventDefault()
    if (window.opener)
      accountData= {...}
      data = {...} #collected in opened window
      approveDataTransfer = document.createEvent("Events")
      approveDataTransfer.dataTransfer = data          
      approveDataTransfer.initEvent("dataAvailable", true, false)
      approveDataTransfer.eventType = "data available"
      window.opener.dispatchEvent(approveDataTransfer)
   window.close()

因此,单击"confirm_data_usage"按钮后,插入此数据的函数将在打开器窗口中触发

transferAccountData = (event) ->
  data = event.dataTransfer
  ...

问题是:它在Chrome和Opera中工作,但在Firefox中event.dataTransfer是未定义的。任何人都看到明显的错误/知道Firefox中阻止事件传输数据的特定内容吗?也许还有另一种方法?问题是否与批准数据传输事件上的受信任属性有关?

我不确定您的事件数据发生了什么,但我通常处理此类事情的方式是将函数附加到window

window.transferAccountData = (data) ->
    # Whatever needs to be done goes here...

然后在新窗口中,您可以直接通过window.opener调用该函数:

window.opener.transferAccountData(data)

我在任何浏览器中都没有遇到过这种方法的任何问题。