顧客から要求されたワークフローは次のようなものです。
登録フォームのユーザーがボタンをクリックすると、別のウィンドウが開きます。
$ ->
$("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 属性に関連している可能性がありますか?