0

編集: 何らかの理由で、間隔は何かを認識しますが、if ステートメント内に入ることなくクラッシュしてループを停止します

これが私の流れです。

  • ウィンドウは、同じドメインでポップアップを開きますwindow.open()
  • ポップアップはツイッターにリダイレクトします
  • ポップアップは同じドメイン (コールバック URL) にリダイレクトされます
  • ポップアップの変数は、ウィンドウに送り返す必要があります。

これは Chrome では問題なく動作しますが、IE9 では機能しません。

私が試したこと(どちらもクロムで動作します)

ポップアップで:

window.opener.function(data);
window.close();

ウィンドウ内:

var checkInterval = setInterval(function(){
    if (win.variable){ // win = popup window!
        clearInterval(checkInterval);
        win.close();
       // works!
    }
}

しかし、どちらも IE9 では機能しません。この問題を解決するにはどうすればよいですか?

4

2 に答える 2

2

ポップアップが twitter に移動すると、ドメインが同じでなくなるため、IE9 ではページの変数を読み取ろうとするとクラッシュします。

window.opener が使用可能かどうかを確認し (同じドメインにいることを意味します)、変数にアクセスする前に同じであることを確認するか (推奨)、if ステートメントを try/catch にカプセル化します。

var checkInterval = setInterval(function(){
    try {
       if (win.variable){ // win = popup window!
           clearInterval(checkInterval);
           win.close();
          // works!
       }
    } catch (e) {}
}
于 2013-03-12T13:33:00.510 に答える
0

本当に簡単なアプローチは、アンカーを使用して変数を返すことです

したがって、コールバック URL は次のようになります。

http://example.com/index/#var1:value1,value2/var2:value3,value4 ...

jQuery で hashchange プラグインを使用すると、問題を処理するのが非常に簡単になります。

また、IE9 で動作するコア Javascript を使用してhasher マイクロ ライブラリを使用できます。

于 2013-03-12T15:02:42.783 に答える