客户要求的工作流程是这样的:
注册表单上的用户单击一个按钮,打开另一个窗口:
$ ->
$("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 属性有关吗?