Safari中的bug window.location.href + hash?

时间:2011-03-15 17:15:13

标签: javascript hash safari

我的JavaScript文件中有一个脚本,我需要打开一个已设置哈希的新文件,如:

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

可能是什么问题?

3 个答案:

答案 0 :(得分:5)

如果dosome.php上的服务器进行了某些重定向,则不会保留哈希值,至少在Safari 4和IE8上是这样。 Chrome和Firefox运行良好。

为了对此进行测试,请尝试在Safari的地址栏中输入网址http://yourdomain.com/...dosome.php#...,看看Safari是否会丢失#。 (使用w {o www进行测试,即使是简单的www重定向也会丢失#。)

如果是这种情况,那么您无法在服务器端执行任何操作,因为#...未发送到服务器;这是客户在导航期间不应该失去它的。

答案 1 :(得分:1)

这是从同一页面完成的吗? dosome.php是什么意思?

然后尝试使用location.hash,

location.hash = "#somestring";

答案 2 :(得分:1)

我有类似的问题。

以下代码在Safari中的iPhone 5上失败:

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

Safari正在重定向到http://example.com/result/

它在Chrome中可以在同一部手机和桌面上正常使用。

我注意到它正在向前添加正斜杠,并想知道在哈希之间添加正斜杠是否有效。

确实如此!

我将代码更改为此代码并且有效:

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

注意哈希之前的/。