1

更新ヘッダー(またはページのメタ更新タグ)で非表示の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>
4

2 に答える 2

1

IE 6、7、および 8 (リリース) でテスト ページを試しましたが、問題を再現できませんでした。

確認事項:

  • Fiddlerをダウンロードし、META REFRESH によって要求されている URL を確認します。実際にあることを確認してくださいhttps。また、ページ 1 と 2 でクエリ文字列をkeepalive.html一意にして、どの要求がメッセージ ボックスを表示させているかを確認できるようにします。
  • 影響を受けるすべてのブラウザーが同じセキュリティ ゾーンでサイトを表示していることを確認します (下部のステータス バーを確認し、IE のすべてのインスタンスが「インターネット」または「ローカル イントラネット」のいずれかであることを確認します)。あるゾーンのブラウザーが機能していて、別のゾーンのブラウザーが機能していない場合は、それらすべてを同じゾーンに入れてみることができます。
  • アドオンなしで Internet Explorer を起動します ([スタート] > [すべてのプログラム] > [アクセサリ] > [システム ツール] > [Internet Explorer (アドオンなし)]) または ([スタート] > [ファイル名を指定して実行] > [iexplore -extoff])。問題のあるシステムでも同じことが起こりますか? この話はあなたの特定の問題とは関係ありませんが、数年前、セッション (セッション Cookie によって維持されている) がセカンダリ ウィンドウで存続していないユーザーが 1 人いました。彼女がダウンロードしてインストールした一般的なカーソル アドオンが、2 つの異なる IE ウィンドウ間での Cookie の共有を妨げていることが判明しました。この話の要点は、IE アドオンは、アドオンとは関係のない奇妙な動作を引き起こす場合があるということです。アドオンなしモードで試して、それらを除外するのが最善です.
  • すべてのマシンが Internet Explorer の同じビルドを実行していることを確認します ([ヘルプ] > [Internet Explorer について] またはhttp://update.microsoft.com/にアクセスします) 。

率直に言って、私は問題の性質について心配しています。ページ 1 にアクセスすると iframe を更新するタイマーが設定され、そのページから移動すると、指定された時間に更新が行われます。メタリフレッシュ。ページ 1 から移動すると、最初の iframe の更新時にタイマーが停止します。keepalive.htmlそのため、Fiddler (および一意のクエリ文字列) を使用して、問題の原因となっているページ 1 の iframe からのリクエストであることを確認する必要があると思います。

于 2009-04-02T20:39:36.937 に答える
0

https で始まる完全な URL で iframe を設定してみてください。過去にこれに出くわしました。これが解決策だったと思います。

于 2009-04-02T19:00:59.123 に答える