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

4

我在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

有什么问题可能出现呢?

5
"it doesn't send the url with hash"是什么意思?哈希值从未发送到服务器。 - Felix Kling
很奇怪,Safari和Chrome使用相同的JavaScript引擎?你用的是哪个版本的Safari? - user657496
如果我直接在Safari中调用上面的页面,我将看到domain.com/dosome.php而没有哈希值,而Chrome将正确地显示为domain.com/dosome.php#mavalues。 - Francesco
1
@rsplak:Safari和Chrome使用相同的渲染引擎,但不使用相同的JavaScript引擎。 - jishi
3个回答

5
如果你的服务器在dosome.php上进行重定向,哈希值将不会被保留,至少在Safari 4和IE8上是这样的。Chrome和Firefox工作得很好。
为了测试这一点,请尝试在Safari的地址栏中输入URLhttp://yourdomain.com/...dosome.php#...,看看Safari是否会丢失#。(测试时使用或不使用www,即使只是一个简单的www重定向也会丢失#。)
如果是这种情况,那么服务端无法做任何事情,因为#...不会被发送到服务器;客户端应该在导航过程中不要丢失它。

我打字速度太快,经常会出错,但我通常会回读并修正错误。 :) - Marco Demaio

1

这是在同一页完成的吗?也就是说,dosomething.php?

然后尝试使用location.hash,

location.hash = "#somestring";

1
我有一个类似的问题。
以下代码在iPhone 5的Safari上失败:
window.location.href = 'http://example.com/result#somehash'

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

在同一手机上,Chrome 和桌面电脑上都能正常工作。

我注意到它在结尾处添加了斜杠,并想知道在哈希之间添加斜杠是否有效。

的确有效!

我将我的代码更改为以下内容并成功了:

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

注意在井号前面加上 / 。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接