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 に答える