2012-06-27 6 views
5

ハッシュを次のように変更した場合:window.location.hash = "main/0/sub/1/na/false";。 ブラウザのアドレスがhttp://mysite.com/#main/0/sub/1/na/falseに変わります。 Pageのonhashchange関数が起動し、すべてが正常に動作しています。window.location.hashでスラッシュを使用する

しかし、Firebugでは、次のURLへのリクエストも送信していることがわかります。http://mysite.com/main/0/sub/1/na/false ...ハッシュのないURL。コンソールには404のサイレントメッセージが表示されます。

デバッグすると、window.location.hashポイントで発生します。

ただし、私がハッシュを以下のように変更した場合:window.location.hash = "main=0&sub=1&na=false";追加のリクエストは送信されません。

最初の例で追加の要求が送信されるのはなぜですか?

UPDATE: 私はそれがwindow.location.hash後にリクエストを送信し、前に気づい$(window).bind('hashchange')(中?)。例がある場合...

window.location.hash = 'main/0/sub/1/na/false'; // Breakpoint 1 in Firebug 

$(window).bind('hashchange', function(e) { 
    e.preventDefault(); // Breakpoint 2 in Firebug 
    e.stopPropagation(); 
}); 

ブレークポイント1で停止すると、要求は送信されません。ブレークポイント2で停止すると、要求はすでに送信されています。

リクエストが送信されていることをApache Tomcatで確認できます。

私はjQueryとjQueryのモバイルが接続されていることを追加します

UPDATE 2: のjQuery Mobileを削除するには、問題を解決します。しかし、私はそれを必要とする:/

UPDATE 3

誰もが興味を持っている場合は、次のjQuery Mobileと :jQueryのモバイルなしhttp://jsfiddle.net/pioSko/hz5PU/3/

http://jsfiddle.net/pioSko/hz5PU/4/

オープンFirebugのか、他のデバッグアプリをし、リンクをテストしてください。

+0

リクエストは実際にサーバーに当たっていますか? FirefoxのFirebugのどのバージョンですか?私は本当に古いものでも、新鮮なChromeでも見られないので、これはどこかのバグかもしれないと思います。 –

+0

FF 12.0および13.0.1で再生できません。ランダムページのFirebugコンソールで、ネットワークリクエストは観測されませんでした。 – lanzz

+0

ダミーサイトを作成しましたが、このエラーは再現できません。したがって、コード内で深くなる必要があります。 – pioSko

答えて

-4

私はここで推測するつもりです。私は、ハッシュの後にスラッシュを使用すると無効なURLであり、Firefoxがおそらく有効なURLであることを確認するためにハッシュを削除することによってこれを補うことを試みていると確信しています。

+3

ハッシュの後にスラッシュが完全に有効で正常です。 –

3

History.jsを使用した場合も同様の問題がありました。私はそれがページを再読み込みしていない間にURLをきれいに(非ハッシュ化)するように設計されているので、そのスクリプトの意図された動作だと思います。

+1

私は同じ問題にぶつかったようです。この問題は、History.jsプロジェクトでまだ開いています。https://github.com/browserstate/history.js/issues/301を参照してください。どのように回避策を講じましたか?いくつかのHistory.jsの代わりに? – xmojmr

+0

正直なところ、私が2012年12月にしていたことを覚えています。申し訳ありません。 (最近のいくつかのプロジェクトで同様の機能を提供するためにAngularのui.routerを使用していましたが、それはうまくいっています) – iameli

+0

私はHistory.jsなどを使用しないことで問題を解決しました。私は '' '' window.location.hash'''読み書きと '' '' window.onhashchange'''イベントだけを使用しています。私のニーズには十分です。スラッシュの書き換えの問題は、あなたの答えが示すようにHistory.js(168の公開された問題があります)が原因でした。私はまた、[devote/HTML5-history-API](https://github.com/devote/HTML5-History-API)を有効な代替手段として考えてきました。 – xmojmr

関連する問題