0

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

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

$ ->
  $("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 中的特定内容阻止事件传输数据?也许还有另一种方法?问题可能与approveDataTransfer 事件的isTrusted 属性有关吗?

4

1 回答 1

0

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

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

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

window.opener.transferAccountData(data)

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

于 2012-06-19T07:49:51.233 回答