現在、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を適切に使用しているかどうかはわかりません。パス名やhrefなどのwindow.locationのプロパティを使用する必要がありますか? 1つのプロパティを設定するとすぐに場所がリロードされるため、たとえば、検索プロパティとパス名プロパティを個別に設定することはできません。 window.locationを直接設定できますか?パラメータで相対URLを設定するだけです。
pathname
およびlocation
のその他の多くのプロパティとリンクは、URLのpartのみを反映します。
http: //www.example.com/path/to/example.html?param1=2¶m3=4#fragment
^protocol^hostname ^pathname ^search ^hash
ご覧のとおり、URLの?...
部分はpathname
の一部ではありません。 URLの一部に疑問符を含めることはできないため、?
を含む値をlocation.pathname
に書き込むことは意味がありません。 Chromeは、pathname
を終わらせないリテラルの疑問符を意味するシーケンスに文字をエンコードすることにより、間違いを修正しています。
これらのプロパティは、処理するためにURLを構成部分に分割するのに最適ですが、この場合はおそらく書き込みたくないでしょう。代わりに、location.href
に書き込みます。これはURL全体を表しますが、相対URLを記述することはまったく問題ありません。これは現在の値に関連して解決されるため、実際にはpathname
を読み取って分割する必要はありません。
location.href= 'myPage.xhtml?u='+encodeURIComponent(selected_user.Username);
URLエンコードに注意してください。ユーザー名に英数字以外の文字を含めることができる場合、パラメーターを壊すそれらの文字を止めるためにおそらくこれが必要になるでしょう。任意の文字列をURLの一部に入れる前に、常にURLエンコードします。
location.href
の代わりにwindow.location.pathname
プロパティを設定してみてください。
window.location.href
を使用することは、set URLへの最も安全な方法と見なされます。これはshouldエンコードの問題を修正すると思います。
window.location.href = window.location.pathname.substring( 0, window.location.pathname.lastIndexOf( '/' ) + 1 ) + 'myPage.xhtml?u=' + selected_user.Username;
それでも解決しない場合は、URLの例を示してください。