質問:
IE と Firefox / Safari では、BASE HREF と Javascript の window.location タイプのリクエストの処理が異なるようです。まず、これは問題の正確な説明ですか? どうしたの?そして、この状況に対処するための最適なクロスブラウザ ソリューションは何ですか?
環境:
私は小さな PHP フラット ファイル サイトレットを持っています (これは実際にはユーザビリティ テストのプロトタイプです)。
PHP で BASE タグの HREF 値を動的に生成します。つまり、当社のサーバーで実行している場合は次のようになります。
$basehref = 'http://www.example.com/alpha/bravo/UsabilityTest/';
私のローカル開発マシンでは、次のとおりです。
$basehref = 'http://ellen.local/delta/echo/foxtrot/UsabilityTest/';
タスクの 1 つとして、ユーザー入力を収集し、Javascript で変換を行い、次のようなコードを使用してサーバーに送信します。
function allDone() {
// elided code for simplicity of stackoverflow question
var URI = "ProcessUserInput.php?";
URI = URI + "alphakeys=" + encodeURI( keys.join(",") );
URI = URI + "&sortedvalues=" + encodeURI( values.join(",") );
window.location = URI;
}
JavaScript ファイル (関数allDone()を含む) と処理用の PHP スクリプト ( ProcessUserInput.php ) の両方が UsabilityTest のサブディレクトリにあります。つまり、実際の URL は
http://www.example.com/alpha/bravo/UsabilityTest/foxtrot/ProcessUserInput.php 別名_
$basehref . '/foxtrot/ProcessUserInput.php'
問題
IE の JavaScript は基本的に BASE HREF を無視しているようです。JavaScript と PHP プロセッサは同じディレクトリに存在するため、ProcessUserInput.phpの呼び出しは正常に機能します。入力が処理され、すべてが正常に機能します。
しかし、Firefox でテストすると、スクリプトの出力が に送信されるため、JavaScriptはBASE HREF を使用しているように見えます
$basehref . '/ProcessUserInput.php'
ProcessUserInput.phpが basehref のサブディレクトリにあるため、これは壊れます。ただし、サブディレクトリ名を JavaScript に追加すると、IE で機能しなくなります。
ソリューション?
これを解決するには、いくつかの方法を考えることができます。
- Javascript では、BASE タグの HREF プロパティを読み取り、手動で
var URI
JavaScript の先頭に追加して、完全に解決された絶対 URL を呼び出します。 - .jsファイルを PHP で処理し、
$basehref
変数をスクリプトに挿入する - ファイルを移動する
- 他の何か?
これを解決する他の方法もあるに違いないと確信しています。IE と Firefox が JavaScript で異なる方法で適用する場合、JavaScript で BASE HREF を処理する最良の方法は何ですか?