私は、window.openとウィンドウ間通信(新しい '子'ウィンドウcommunicates success/failure to the 'parent' window)の使用に依存するいくつかのJavaScriptを持っています。ウィンドウ間通信のブラウザサポートを検出する
このウィンドウ間通信はほとんどの場合うまく機能しますが、ウィンドウ間通信をサポートしないブラウザでは機能しません。例はWindows PhoneとiPhone's UIWebViewです。
私は現在、これらのシナリオを検出するためにクライアント側(JavaScriptベース)user-agent sniffingを実行し、別のコードパスを使用して問題を回避します。
私が使用できるユーザーエージェントのスニッフィングの代替品はありますか?
明らかにするには、window.openが機能します(ここでは、「要求されたURLを開く」という意味です)。 がでない場合は、window.openerとpostMessageを使用して、 'child'から 'parent'へのウィンドウ間通信を行います。
function yourMessageCallback(event) {
// your other handler stuff here...
event.source.postMessage('Yeah I got it', event.origin);
}
を次にあなたが返事が到着したときにクリアすることができ、送信側でタイマーを行うことができます:あなたが戻って、このような子ウィンドウへの応答を送信することができ、あなたのオープナーウィンドウ・メッセージ・コールバックで
子供はwindow.openerプロパティにアクセスすることもできますがnullにする必要がありますが、残念ながらこれは信頼性の高い検出手法ではありません。例として、親からwindow.openを使用せずに直接子ウィンドウを開くと、子が実際にウィンドウ間通信を実際にサポートしていても、window.openerはnullになります。 – mjwills
'window.open'は動作するのですが、関数は子ウィンドウIDを返しますか? – Raptor
私はその情報をどのように役立てるのか分かりません。私が欲しいのは、親ウィンドウと話すことができるかどうかについての子ウィンドウ内の特徴検出である。 window.open関数呼び出しの戻り値は、明らかに親にしか利用できません。つまり、この気密なハッチウェイの反対側にあることになりました。 これらのことは、戻り値をチェックするとモバイルIE9ではnull、UIWebViewではウィンドウオブジェクトになります。どちらの場合も、新しいウィンドウが正しくロードされたことに注意してください(しかし、親ウィンドウと通信することはできません)。 – mjwills