更新ヘッダー(またはページのメタ更新タグ)で非表示のIFRAMEを使用してキープアライブを実装するASP.NETアプリケーションがあります。
Internet Explorerの多くの(すべてではありませんが)インスタンス(IE7およびIE8ベータ版でこれまでに再現されていますが、すべてのユーザー向けではありません!)の場合、両方にこのキープアライブIFRAMEが含まれる2つの安全なページ間を移動すると、次のようなシーケンスが得られます。イベント:
0s:load page1.html-keepalive.htmlを含み、15秒で更新をスケジュールします 5秒:page2リンクをクリックします load page2.html-keepalive.htmlを含み、20秒で更新をスケジュールします 15秒:ページ1のフレームの更新が発生します。混合コンテンツエラーボックスが表示されます
この時点で、「このページには安全なコンテンツと安全でないコンテンツの両方が含まれています」というエラーがブラウザに表示されます。
page1.html:
<html><head><title>Page 1</title></head><body>
<h1>This is Page 1</h1>
<p><a href="page2.html">Go to Page 2</a></p>
<iframe src="keepalive.html" width="500" height="200" />
</body></html>
ページ2は同じですが、ページ2と表示され、代わりにページ1にリンクしています。
keepalive.html:
<html><head>
<meta http-equiv="refresh" content="15" />
</head><body>
<h2>This is the keep alive</h2>
</body></html>
私がこれをテストしたすべてのブラウザで、インターネットゾーンにメタリフレッシュを実行する権限があり、混合コンテンツを表示するときにプロンプトが表示されるように設定されていることを確認しました。IFRAMEにsrc=""タグを付ける必要があることを示唆するすべてのページを読みました。そうしないと、IEは安全でないと見なします。設計上、キープアライブページのsrcタグが必要です。
1ページ目に永遠に座っていると、IFRAMEは正常に更新されます。このエラーは、ページ2に変更した後に初めて表示されます。
最小限の変更でこれを修正する方法を探しています。キープアライブのより良い方法は、コントロールと自動更新画像を使用することです。これについては、将来のバージョンで調査します。私が念頭に置いている考えられる回避策は、IFRAMEのコンテンツを、メタリフレッシュではなく、サーバーへの通常のXMLHttpRequestにすることです。単純なバグ修正はさらに良いでしょう。
更新: Grant Wagnerの回答を正解としてマークしました。これは、実際の問題につながるためです。LenovoPasswordManagerアドオンのCpwmIEBrowserHelperがこのエラーを引き起こします。これは、一部の人がこの問題を認識し、他の人は認識しない理由をきちんと説明しています。私が尋ねたほとんどの人はThinkPadを持っています。拡張機能を無効にすると、更新の問題が解消されます。
アプリケーションを使用する可能性のあるすべての人にこの問題を修正させることはできないため、javascriptタイマーを使用してウィンドウの場所を更新し、keepalive.htmlページを次のように更新します。
<html><head>
<meta http-equiv="pragma" content="no-cache">
</head><body>
<h2>This is the keep alive</h2>
<script type="text/javascript">
setTimeout ('ReloadPage()', 15000 );
function ReloadPage() {
window.location = window.location;
}
</script>
</body></html>