5

BASE 要素を使用して、共通のスタイルシートと画像を多数含む特定のベース ディレクトリを識別する HTML ページ (Web サーバー上ではなく、ローカル) があります。以下に例を示します (ページは c:\temp\html\test.html に保存され、リソース ディレクトリは c:\temp\resources です):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
    <head>
        <base href="file:///c:/temp/resources/"></base>
    </head>
    <body>
        <p><img src="image.jpg" /></p>
    </body>
</html>

これは、私がテストした現在のすべてのブラウザー (Firefox、Chrome、IE9) で正常に動作し、IE8 の Quirks モードでも正常に動作します。しかし、IE8 標準モード (このページのデフォルトであり、実際のページでは必要なモード) で実行されている IE8 では、スタイルシート、スクリプト、または画像の参照が壊れています。要素が完全に無視されているかのようです。

要素で他のバリエーションを試しました-<base href="file:///c:/temp/resources/">または<base href="file:///c:/temp/resources/"/>、あらゆる種類の異なるファイルURL、たとえばfile:///c:/temp/resources/test.htmlなど、およびベースの相対hrefも試しましたが、何もないようです画像/スタイルシート/スクリプトをロードするよう説得します。

上記の例は些細なことのように思えますが、実際のシナリオでは、IE8 標準モードで IE8 にページをロードし、特定の設定を行う必要があるため、解決策があれば解決策を見つけようとしています。

この要素に関連する初期の IE8 バージョンのバグへの言及をいくつか見つけましたが、それらはかなり前に修正済みとしてマークされており、すべての IE8 更新が適用されたクリーンな Windows 7 VM でこれをテストしています。

4

2 に答える 2

9

ステータスの更新:   使用:<base href="\\c:\temp\resources\" />

IE8がローカルファイルの基本属性を使用できるようにするために、このソリューションの作成に使用したプロセスは次のとおりです。

明確にするために:このW3C検証済みソリューションは、 IE7、IE8、およびすべての最新のブラウザーで機能します。


**参照スクリーンショット:**:
ここでは、*** IE8アドレスバー***が他の最新のブラウザーのように動作しないことがわかります。スラッシュは***反転***され、 `file://はありません。 /`プロトコルが表示されます。ただし、** IE8 **は、ページの更新時に**ブラウザのステータスバー**に `file:///`プロトコルを表示します。

ここに画像の説明を入力してください

参照スクリーンショット:IE8はローカルファイルを異なる方法で処理するため、IE8プロトコルを理解すること
重要です。file:///

使用可能な構文方法を理解するために、ローカルイントラネットのインターネットオプション([セキュリティ]タブ)を表示すると、その情報が表示されます。ここでは実際には変更は行われていません。構文だけをお願いします。

ここに画像の説明を入力してください

上の写真では、ローカルイントラネットウィンドウで円記号が必要であることを確認しています。

また、プロトコルがこのスラッシュ構文file:\\に関連付けられていることも示しています。プロトコルはIE8によって自動的に暗示されるため(前述:ブラウザのステータスバーを参照し、スラッシュが正しくレンダリングされることに注意してください!!)。タグでこのプロトコルを 定義することが問題です。解決策はプロトコルを使用しないことですfile:///

file:Base


**参照リンク1:** [**プロトコルなしのURLスキーム:**](http://encosia.com/cripple-the-google-cdns-caching-with-a-single-character/)
>正確に読みやすいわけではありませんが、[**RFC3986のセクション4.2**][3]は、プロトコル(HTTPまたはHTTPS)を完全に省略した完全修飾URLを提供します。URLのプロトコルが省略されている場合、ブラウザは代わりに基になるドキュメントのプロトコルを使用します。
**参照リンク2:** [** Paul Irishによるネットワークパス参照の理解:**](http://paulirish.com/2010/the-protocol-relative-url/)

*もちろん、ファイルをローカルで表示している場合は、file://プロトコルを使用してファイルを要求しようとします。


上記の参照は、 `//`を使用すると、ファイルまたはアセットにアクセスするときに、現在知られている**URLスキーム**を使用できるようになることを説明しています。** IE8 **はゲームチェンジャーであるため、すべてのブラウザが標準の `file:///`として変換/解釈するため、`//`の代わりに**`\\`**を使用するとBaseタグで機能します。ブラウザ**IE7**を含むURLスキーム(*ローカルファイルを含む*)!
**完全なHTMLマークアップ| 動作中のデモ:**
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>Using Base Tag with Local Files IE8 and Modern Browser DEMO</title>

  <!-- The name of this file is:  test.html  -->
  <!-- The location of this HTML file on the hard drive is:  C:\temp\html\test.html  -->

  <!-- This unusually constructed Base attribute tag uses two rules to have it work for Locally Hosted IE8 Files that are not server based. -->
  <!-- First, the "URL Scheme" is based on "Network Path Reference" which means no Protocol is used. -->
  <!-- Second, the "forward slashes" are changed to "back slashes". It's the syntax IE8 actually expects. -->
  <!-- This entire method is also friendly for modern browsers showing these local files that are not server based. -->
  <base href="\\c:\temp\resources\" />
    
</head>
<body>

  <p>
    <!-- The location of this "image.jpg" on the hard drive is at:  C:\temp\resources\image.jpg  -->
    <img src="image.jpg" alt="image" />
  </p>

</body>
</html>
于 2012-07-07T04:15:44.123 に答える
0

残念ながら、IE8 の標準モードは BASE 要素の file:// URI を処理しないようです。

ローカル ページ内でスクリプトを実行できる場合は、単純な JavaScript を使用してすべての外部要素 (SCRIPT、IMG、LINK、IFRAME、FRAME) をループし、スキームのない URI (ないもの) を修正することをお勧めします。 「://」を含まない) 必要な BASE を使用します。

于 2012-07-02T00:29:35.520 に答える