2011-03-15 65 views
3

我有一個腳本在我的JavaScript文件,我需要打開已設置散列,像一些新的文件:bug window.location.href在Safari中的散列?

function search(queryString){ 
    window.location.href = "dosome.php#" + queryString 
} 

因爲dosome.php是我對搜索所有腳本的頁面...

我知道這聽起來像一個黑客,但我不能花更多的時間重建一切。我只是想暫時解決它。

它適用於Firefox和Chrome,但由於某種原因,它在Safari中不起作用 - 它不會將哈希值發送到URL。 Safari瀏覽器發送:中

domain.com/dosome.php 

代替

domain.com/dosome.php#queryvalues 

可能是什麼問題呢?

+5

你是什麼意思*它沒有發送帶有哈希*的URL?散列永遠不會發送到服務器。 – 2011-03-15 17:23:24

+0

這很奇怪,Safari和Chrome使用相同的JavaScript引擎?你在哪個版本的Safari? – rsplak 2011-03-15 17:35:36

+0

意味着如果我像上面看到的那樣直接調用頁面,在Safari中我會看到domain.com/dosome。PHP沒有哈希值,而Chrome則是正確的domain.com/dosome.php#mavalues .. – Francesco 2011-03-15 17:54:20

回答

5

如果您的服務器在dosome.php做了一些重定向,那麼散列不會保留,至少在Safari 4和IE8上。 Chrome和Firefox運行良好。

爲了測試它,請嘗試在Safari的地址欄中輸入網址http://yourdomain.com/...dosome.php#...,然後查看Safari是否繼續丟失#。 (用W/O www測試兩個,甚至一個簡單的WWW重定向失去#

如果是這樣的情況下,有什麼可以做服務器端,因爲#...不會被髮送到服務器;這是客戶在導航期間不應該失去的。

+0

我寫得太快了,我寫得太錯了,但是我平時回頭修改錯誤。 :) – 2011-03-15 17:33:53

1

這是從同一頁面完成的嗎?意思,dosome.php?

然後嘗試使用的location.hash,

location.hash = "#somestring"; 
1

我也有類似的問題。

下面的代碼在Safari中沒有在iPhone 5:

window.location.href = 'http://example.com/result#somehash' 

野生動物園重定向到剛剛http://example.com/result/

它是正確的Chrome相同的電話上,以及在桌面上工作。

我注意到它正在添加正斜槓到最後,並想知道是否在哈希之間添加正斜槓會起作用。

它做到了!

我改變了我的代碼,這和它的工作:哈希

window.location.href = 'http://example.com/result/#somehash' 

注意到了/前。