6

私のアプリケーションは、SSL のみのWeb サイトでDojo 1.1.1を使用しています。現在、 と を利用しています。dijit.ProgressBardijit.form.DateTextBox

Firefox 2 & 3 ではすべてがうまく機能しますが、同じスクリプトをIE7で試すとすぐに、迷惑なセキュリティ情報ダイアログが表示されます。

このページには、安全なアイテムと安全でないアイテムの両方が含まれています。非セキュア項目を表示しますか?

HTTPS 以外の参照についてページを精査しましたが、役に立ちませんでした。に特有のもののようdojo.jsです。以前は が何も設定されていなかったiframe不具合がありましたsrcが、現在は修正されているようです (ソースを確認したところ)。

他にこの問題を抱えている人はいますか?DojoをSSL のみのWeb サーバーでIEとうまく連携させるためのベストプラクティスは何ですか?

4

3 に答える 3

9

DijitのJavaScriptソースコードを確認した後、動的に生成されたIFRAMEへの「安全でない」参照が原因でエラーが発生した可能性が高いと思いました。スクリプトファイルには2つのバージョンがあり、非圧縮は元のソース(dijit.js.uncompressed.js)を表し、標準(dijit.js)は最適な転送時間のために圧縮されていることに注意してください。

非圧縮バージョンが最も読みやすいので、それに基づいて私のソリューションを説明します。行#1023で、IFRAMEがJavaScriptでレンダリングされます。

if(dojo.isIE){
    var html="<iframe src='javascript:\"\"'"
           + " style='position: absolute; left: 0px; top: 0px;"
           + "z-index: -1; filter:Alpha(Opacity=\"0\");'>";
    iframe = dojo.doc.createElement(html);
}else{...

どうしたの?IEは、IFRAMEのsrcが「安全」であるかどうかを知りません。そのため、次のように置き換えました。

if(dojo.isIE){
    var html="<iframe src='javascript:void(0);'"
           + " style='position: absolute; left: 0px; top: 0px;"
           + "z-index: -1; filter:Alpha(Opacity=\"0\");'>";
    iframe = dojo.doc.createElement(html);
}else{...

これは、IEのJavaScriptツールキットとSSLで最も一般的な問題です。DIVのオーバーレイサポートが不十分なため、IFRAMEがシムとして使用されるため、この問題は非常に一般的です。

最初の5〜10ページのリロードは問題ありませんが、その後、セキュリティエラーが再び表示され始めます。これはどのように可能ですか?同じページは5回のリロードで「安全」であり、6回目のロード時にIEによって「安全でない」として選択されます。

実は、dijit.waiのonloadイベントで設定されている背景画像もあります(行#1325)。これは次のようになります。

div.style.cssText = 'border: 1px solid;'
                  + 'border-color:red green;'
                  + 'position: absolute;'
                  + 'height: 5px;'
                  + 'top: -999px;'
                  + 'background-image: url("' + dojo.moduleUrl("dojo", "resources/blank.gif") + '");';

background-imageタグにはHTTPが含まれていないため、これは機能しません。場所が相対的であるという事実にもかかわらず、IE7はそれが安全であるかどうかを知らないので、警告が出されます。

この特定の例では、このCSSは、Dojoのアクセシビリティ(A11y)をテストするために使用されます。これは私のアプリケーションがサポートするものではなく、このメソッドには他の一般的なバグのある問題があるため、dijit.waiのonload()のすべてを削除することにしました。

すべてが良いです!ページの読み込みに関する散発的なセキュリティの問題はありません。

于 2008-09-16T14:19:24.510 に答える
1

ページが https 以外の URL からファイルをロードしている場合、Firefox は同じことを通知するはずです。エラーの代わりに、下部 (ステータス バー) のロック シンボルに取り消し線が引かれます。そうではありませんか?

シンボルが表示された場合は、それをクリックして、どのファイルが「安全でない」かを確認してください。

于 2008-09-13T09:31:50.500 に答える
1

CDN を使用している場合は、ここに示すように、HTTPS によってすべてのモジュールを含めることができます

<script type="text/javascript">
djConfig = {
  modulePaths: {
    "dojo": "https://ajax.googleapis.com/ajax/libs/dojo/1.3.2/dojo",
    "dijit": "https://ajax.googleapis.com/ajax/libs/dojo/1.3.2/dijit",
    "dojox": "https://ajax.googleapis.com/ajax/libs/dojo/1.3.2/dojox"
  }
};

</script>
<script src="https://ajax.googleapis.com/ajax/libs/dojo/1.3.2/dojo/dojo.xd.js" type="text/javascript"></script>

必要に応じて、さまざまなバージョンでテストできます。現在最新のものは、1.6.1

于 2011-09-28T20:31:19.343 に答える