繁体   English   中英

在URL中隐藏锚标签[参考:Rails在URL中隐藏#anchor标签]

[英]Hide anchor tag in URL [Ref: Rails hide #anchor tag in URL]

我采用@Old Pro的答案:

history.replaceState({}, '', window.location.href.substring(0, window.location.href.indexOf('#')))

我的目标是:

  1. 从页面1重定向到页面2并跳转到锚点#DivTgt

  2. 重定向后,将从网址中删除#DivTgt。 因此,URL仅显示page2.php,而不显示page2.php#DivTgt

@Old Pro的方法可以在Firefox上完美运行,但不能在Chrome / Safari上运行。 对于Chrome / Safari,它会重定向并删除#DivTgt,但不会跳转到锚定#DivTgt。 @Old Pro的方法已插入到Page2(目标页面)上。

我试过replaceState和pushState都返回相同的结果(即仅在Firefox上有效)

我错过了什么吗?

首先,我建议将您的JavaScript代码移动到.ready()函数中。 否则,当DOM尚未准备就绪时,您的代码可能会被调用。

我不能告诉你为什么它不起作用,但是由于没有明确的规格,显然新的html5 push和replace状态函数存在一些问题。 请阅读: history.replaceState()示例?

因此,为了帮助您,我可以提出一种解决方法。 保持推送/替换状态功能,并使用javascript强制滚动到锚点。

你能看看我的例子吗? http://francoisjeunesse.be/example/page1.php

page1.php中:

<a href="page2.php#DivTgt">Go to Page 2</a>

使page2.php:

<!DOCTYPE HTML>
<html>
<head>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.11.0.min.js" ></script>
<script type="text/javascript"> 
$( document ).ready(function() {
    if (window.location.href.indexOf('#DivTgt') != -1){
        document.getElementById("DivTgt").scrollIntoView(true);
    }
    history.pushState({}, '', window.location.href.substring(0, window.location.href.indexOf('#')));

});
</script>
</head>
<body>
<div style="border:1px solid #000;min-height:1000px">spacer</div>
<a id="DivTgt" name="DivTgt"/>anchor is here</a>
</body>
</html>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM