18

私はFirefoxとIEの間でフラストレーションを感じています.Javascriptで作業する前に、ハッシュ内のパラメータを自動的にデコードしているため、ほとんどの場合Firefoxです。IE は URL を自動的にデコードしないため、読み取りエラーは発生しません。

私の問題はこれと似ていますが、ASP.NET ASP.NET MVC を使用していないことを除いて、JSON でエンコードされたパラメーターを AJAX から自動的にデコードします。

したがって、次のようなURLを取得するとexample.com/#question=!%40%23%24%25^%26*(

「!%40%23%24%25^%26*(」はencodeURIComponentを使用してエンコードされていましたが、IEではハッシュにアクセスすると「!%40%23%24%25^%26*(」のままになります。 "しかし、Firefox では、ハッシュにアクセスすると、自動的に "!@#$%^&*("

これに関する問題は、スクリプトでdecodeURIComponentを使用してエンコードされた値をデコードしていることです。これは、文字列が実際にエンコードされている場合は問題ありません。Firefox で既にデコードされているため、不正な形式の URI シーケンス エラーが表示されますが、IE ではエラーはまったく表示されません。

どうすればこれを修正できますか?

4

5 に答える 5

19

検索したところ、これはクロスブラウザの問題であることがわかりました。location.href.split("#")[1]代わりに使用することをお勧めしますwindow.location.hash

于 2011-01-29T08:39:27.300 に答える
1

これは実際に使用したいものです:

decodeURI(window.location.hash.substr(1))

実際、window.location.href.split("#!")[1] は FF によって自動的にデコードされません (少なくとも今日)。

于 2011-08-22T04:19:11.987 に答える
0

この問題がありました。私はこの解決策でそれを解決しました:

var currentLocation = document.location.hash;
var decodedLocation = decodeURI(currentLocation);
于 2015-10-26T08:53:08.147 に答える
0

上記の答えは、URL に複数の # が含まれている場合を除いて機能します。これはすべてのケースを処理する必要があります:

var hash = "";
var indexOfHash = location.href.indexOf("#");
if (indexOfHash > -1) {
    hash = location.href.substring(indexOfHash);
}

また、これはすぐに Firefox で修正されるようです。ナイトリーをヒットするだけです:

https://bugzilla.mozilla.org/show_bug.cgi?id=378962

于 2015-05-01T18:46:42.207 に答える