2011-10-13 27 views
0

在www.example.org网站上,我有一个锚点#anchor。我必须使用锚,因为该网站是用GWT编写的,并且嵌入在iframe中(并且这两个网站都有不同的域)。iframe中的window.location.href在FireFox中不起作用

幸运的是,我找到了一个滚动到Chrome,Safari,IE7,IE8,IE9的锚点的解决方案,但事实证明它在Firefox中无法使用。

在我的代码中,我检查了浏览器是否是IE中的一个。如果是的话,我这样做:

window.location = www.example.org#anchor 

而且完美的作品。

如果浏览器是不是其中的一个IE浏览器的话,我这样做:

window.location.href = '#anchor'; 

,这完全在Chrome和Safari。

但是这两种解决方案都不适用于Firefox(6)。有没有人有一个想法,我怎么可以在FireFox中滚动到锚?

P.S. scrollIntoView,scrollTo(0,0)并得到一个元素滚动到该元素在这种情况下不起作用......经过几天的尝试,我认为只有锚点工作。

+0

您是否在FireFox中尝试过'document.location.href'? – Biotox

+0

现在是。同样的结果:( – mkn

回答

0

用途:

window.location.hash = "anchor" 

这应该做的伎俩在每个浏览器。这里是一个在Firefox中工作的live example。此外,当设置散列值时,必须显示a-锚点,否则FF7将不会跳转到锚点。这里的an example在FF7中不起作用的是证明你不允许做什么。

+0

在FF中不起作用(我确信我也是为IE8浏览器尝试过的,但我发现的唯一解决方案正是我在上面发布的) – mkn

+0

它正在工作,您可能有另一个问题/错误。显示代码你是如何尝试的。 – styrr

+0

它可以在Chrome和Safari中使用,但不能在FF中使用。我没有太多代码可以显示哪些帮助。我只有一个函数:$ wnd.location.hash =“锚点“;它是GWT中的JSNI函数,在文档中我有一个像这样的锚点 mkn

0

您向下滚动的元素是否具有ID属性,并且该ID仅用于一次?

+0

并且只有一个它 – mkn

+0

我会尝试调用它不是锚的东西。这可能是某种保留字。我从来没有提到你提到的FF问题。 –

+0

不幸的是,它仍然无法与重命名 – mkn

3

我知道这是一段时间后,但我刚刚遇到同样的问题,并disinterred一个可怕的,但有效的解决方案。问题:Firefox在某些iframe中不响应location.hash。上面在jsfiddle中发布的简单示例确实可行,但更复杂的示例(在我自己的Facebook应用程序中)却没有。解决方案:在您想要的锚位置创建一个视觉隐藏的INPUT元素。

<input id="top_anchor" type="text" style="position:relative; z-index:-1; float:left"> 

的CSS的目的是浏览器欺骗,以为输入是可见的,但实际上使元素对用户不可见,修改您认为适合自己的情况。 z-index会将其渲染到其父元素的下方(您可能需要弄乱父元素才能使其完全正常工作),并且应用于该元素的浮点数将有助于输入在其父项中折叠。我们不使用“display:none”或“visibility:hidden”是很重要的,因为浏览器会认为该元素在视觉上隐藏,而下一个部分将不起作用。

下一部分:在你的JavaScript,而不是改变散列或位置,我们发现一个更狡猾的方法来让浏览器跳转到页面的某个点:

document.getElementById('top_anchor').focus(); 

我只是在Firefox 8中测试了它,它工作得很好。有点令人伤心的是,这种不诚实的黑客行为会起作用,但原始的,善意的代码不会;但我完全理解某些行为需要由用户操作触发的思维过程。

+0

听起来很有趣,我必须测试它,谢谢分享这个解决方案 – mkn

+0

+1对于非常gud破解,但它带来了page.how的底部,带来了id部分的顶部。 – Devendra

1

试试这个:

setTimeout(window.location.hash = "anchor",500) 
0

非常感谢您指出的,而不是 window.location.href的window.location.hash。

随着window.location.hash我能够重新加载页面的锚点!

<a href="javascript:window.location.hash = '#anchor'; 
window.location.reload(true);">Link text...</a> 
相关问题