0

iframe を含むページがあります。iframe 内で、デフォルト ページは javascript を実行して子ウィンドウを開き、外部サービスにログインしてから、その外部サービスのコンテンツを iframe に表示します。

私のコードは Chrome と IE では正常に動作しますが、Safari と Firefox では動作しません。これらのブラウザーでは、親ウィンドウは、ユーザーが現在外部サービスにログインしているという事実を無視しているように見え、表示されるはずの情報ではなく、「ログインしていません」というメッセージを表示します。

これが私がやろうとしていることのコードです。

HTML (メインページ):

<iframe id="brief" name="brief" src="contents/somepage.php?var=WXYZ" width="962" height="600">
<p>Your browser does not support iframes.</p>
</iframe>

somepage.php

<html>
<head>
<script type="text/javascript">
window.onload = function()
        {
var code = 'WXYZ';
var login = http://www.externalsite.com/brief/html.asp?/cgi-bin/service?msg=0048&usr=username&pwd=pass';

//OPEN CHILD WINDOW AND LOGIN USING VARIABLES ABOVE, THEN CLOSE WINDOW
childWindow=window.open(login,'','width=30,height=30,location=no');
var cmd = 'childWindow.close()';
setTimeout(cmd,2000);

//REDIRECT THIS IFRAME TO BRIEFING INFORMATION
var uri = 'http://www.externalsite.com/brief/html.asp?/cgi-bin/service?msg=0092&AID=NOSEND&MET=1&NTM=1&LOC='+code;
self.location.href=uri;
}
</script>
</head>

<body>
&nbsp;
</body>
</html>

さまざまな setTimeout 関数を調整して、スクリプトの特定の側面を遅らせて、他の何かが発生するのを待機しようとしましたが、役に立たないようです。

このコードには、見落としているクロスブラウザーの問題がありますか?

ありがとう

4

1 に答える 1

1

setTimeout(cmd,2000);スクリプトの実行を 2 秒間ブロックしません。むしろ、約 2 秒で発生するイベントを設定します。を呼び出した直後にsetTimeout、スクリプトの残りの部分が実行されます。

// This happens right away
uri = 'http://www.externalsite.com/brief/html.asp?/cgi-bin/service?msg=0092&AID=NOSEND&MET=1&NTM=1&LOC='+code;
self.location.href = uri;

どのブラウザーでも動作するという事実は、幸運なタイミングです。ポップアップが閉じた後に iframe を更新する場合は、そのコードをコールバックに追加します (ちなみに、タイマー ハンドラーに文字列を使用する必要はありませんし、使用すべきではありません)。

setTimeout(function() {
    childWindow.close();
    var uri = 'http://www.externalsite.com/brief/html.asp?/cgi-bin/service?msg=0092&AID=NOSEND&MET=1&NTM=1&LOC='+code;
    self.location.href = uri;
}, 2000);

ポップアップのコンテンツが 2 秒以内に読み込まれない場合、このソリューションでも機能しません。最善の解決策は、読み込み後にポップアップを閉じることです。次に、いつ閉じたかを検出し、iframe をリロードする準備ができていることを知ることができます。しかし、これがあなたが制御できないサードパーティのサイトである場合、おそらくこのような理想的とは言えない解決策を使用して行き詰まっています.

于 2012-10-19T01:26:02.863 に答える