2011-08-07 31 views
7

我无法让window.location.hash = location.hash在Safari中工作。“window.location.hash = location.hash”在Webkit中无效(Safari和Chrome)

我正在使用JavaScript将我的页面内容用可滚动的DIV封装,放置在我的网页导航栏下方。由于滚动条的位置在javascript运行时被重置,因此我将丢失URL设置的原始哈希位置。我需要重新提示哈希位置没有使用JavaScript重新加载页面,所以我使用window.location.hash = location.hash。它适用于IE8,Firefox和Opera,但在Safari中无法使用。 (我也会假设Chrome,但我没有检查)。有什么建议么?

提示:我喜欢jQuery。

+0

请定义“不起作用”。 –

+1

@Tomalak据我所知,这行代码永远不会在Safari中执行。 (1)包装器JavaScript执行,将滚动条位置重置到页面顶部。 (2)出现一个警告,告诉我'window ... hash'函数是在页面上运行的下一个东西......就是这样。没有其他(有关)发生。 –

回答

11

的Webkit有两个奇特阻止window.location.hash = location.hash正常工作。

  1. Webkit的响应window.location.href而不是window.location.hash(像所有其他浏览器一样)。奇怪的是,webkit仍然可以读取使用location.hash
  2. 的Webkit已经记录了错误,这错误的href location必须设置为相同位置之前,浏览器会去新位置的URL的hash标签。错误报告here

此代码解决我的问题:(使用jQuery)。

$(document).ready(function() { 
    gotoHASH() 
}; 

function gotoHASH() { 
    if (location.hash) { 
     if ($.browser.webkit == false) { 
      window.location.hash = location.hash; 
     } else { 
      window.location.href = location.hash; 
     } 
    } 
}; 
0

将location.hash设置为其他值,然后立即将其设置回。

var t = window.location.hash; 
window.location.hash = "non-existant-id"; 
window.location.hash = t; 
+0

没有雪茄。您的代码只修改了URL哈希标记。它从不移动页面。 –

0

的JavaScript改变原单散列位置之前,获得使用

var st = $(window).scrollTop(). 

当你要恢复的滚动位置的滚动位置,使用

$(window).scrollTop(st); 
+0

'var st = $(window).scrollTop()'甚至没有在Safari中设置变量。当我运行'$(window).scrollTop(st)'时,控制台给了我一个变量未定义的错误。 (尽管如此,代码可以在其他浏览器中运行。) –

4

我结束了

window.location.hash = ""; 
window.location.hash = "myanchor"; 

这在我和iOS和Android上的Chrome测试的所有桌面浏览器工作正常。

相关问题