45

現在、window.location.pathnameプロパティを設定して、ユーザーを相対URLにリダイレクトしています。新しいURLにはパラメータがあるため、JavaScriptの行は次のようになります。

window.location.pathname = window.location.pathname.substring( 0, window.location.pathname.lastIndexOf( '/' ) + 1 ) + 'myPage.xhtml?u=' + selected_user.Username;

これはFirefoxで成功しますが、Chromeは疑問符を「%3F」でエンコードし、その後リクエストは失敗します。

window.locationを正しく使用しているかどうかわかりません。pathnameやhrefなどのwindow.locationのプロパティを使用する必要がありますか?1つのプロパティを設定するとすぐに場所が再読み込みされるため、たとえば、検索プロパティとパス名プロパティを個別に設定することはできません。window.locationを直接設定できますか?パラメータを使用して相対URLを設定するだけです。

4

3 に答える 3

65

pathnameおよびリンクの他の多くのプロパティは、URLの一部locationのみを反映しています。

http:  //www.example.com/path/to/example.html?param1=2&param3=4#fragment
^protocol^hostname      ^pathname            ^search           ^hash

ご覧のとおり?...、URLの一部はpathname;の一部ではありません。URLのその部分に疑問符を含めることはできない?ため、にを含む値を書き込むことは意味がありません。location.pathnameChromeは、文字を文字通りの疑問符を意味するシーケンスにエンコードすることで間違いを修正していますが、これは終了しませんpathname

これらのプロパティは、URLを構成要素に分割して処理するのに最適ですが、この場合は、おそらくそれらに書き込みたくないでしょう。代わりに、に書き込みlocation.hrefます。これはURL全体を表しますが、相対URLを書き込むことはまったく問題ありません。これは現在の値を基準にして計算されるため、実際には、を読み取って分割する必要はまったくありませんpathname

location.href= 'myPage.xhtml?u='+encodeURIComponent(selected_user.Username);

URLエンコードに注意してください。ユーザー名に英数字以外の文字を含めることができる場合は、これらの文字がパラメーターを壊さないようにするために、おそらくこれが必要になります。URLの一部にする前に、常に任意の文字列をURLエンコードしてください。

于 2010-09-04T19:22:03.980 に答える
15

location.hrefの代わりにプロパティを設定してみてくださいwindow.location.pathname

于 2010-09-04T16:18:15.033 に答える
8

を使用すると、URLを設定window.location.hrefする最も安全な方法と見なされます。これでエンコーディングの問題解決すると思います。

window.location.href = window.location.pathname.substring( 0, window.location.pathname.lastIndexOf( '/' ) + 1 ) + 'myPage.xhtml?u=' + selected_user.Username;

それでも問題が解決しない場合は、URLの例を示してください。

于 2010-09-04T16:19:15.483 に答える