window.opener.dispatchEvent 不会在 Firefox 中传输附加的数据
window.opener.dispatchEvent doesn't transfer attached data in Firefox
客户请求的工作流程是这样的:
注册表单上的用户单击一个按钮,打开另一个窗口:
$ ->
$("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)
我在任何浏览器中都没有遇到过这种方法的任何问题。
相关文章:
- 使用Emscripten Worker API传输数据而不进行复制
- 使用 JavaScript 通过网页传输数据
- 是否可以在由春季网络流驱动的html页面之间传输数据
- 使用 nodejs 通过 tcp 套接字传输数据
- 如何在 Angular .js 中从 html 传输数据
- 本地存储无法传输数据,并非在所有浏览器中都有效
- 使用 Angular 2/RxJs 5 beta 可观察从 while 循环流式传输数据
- 在 meteor.js 中通过邮件从 html-form 传输数据
- 使用服务在 Angular 中不同应用程序的控制器之间传输数据
- 在网站上的页面之间传输数据
- PhoneGap(网络移动应用程序)-在页面之间传输数据
- PubSub模式用于在两个解耦的javascript模块之间传输数据
- 在Java后端和javascript前端之间传输数据
- 在不同域的用户脚本之间传输数据
- 传输数据以供其他网站使用
- 使用jQuery在MVC上传输数据的最佳方式
- 在cgi和Javascript/Jquery之间传输数据
- 从表中传输数据
- 在函数中传输数据?Javascript
- 为什么谷歌分析使用一个像素的图片来传输数据