簡體   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