簡體   English   中英

“window.location.hash = location.hash”在Webkit中不起作用(Safari和Chrome)

[英]“window.location.hash = location.hash” does not work in Webkit (Safari & Chrome)

我無法使用window.location.hash = location.hash在Safari中工作。

我正在使用javascript來封裝我的頁面內容,其中包含一個可滾動的DIV,位於我網頁的導航欄下方。 由於當javascript運行時滾動條的位置被重置,我丟失了URL設置的原始哈希位置。 我需要重新提示哈希位置而不使用javascript重新加載頁面,所以我使用window.location.hash = location.hash 它適用於IE8,Firefox和Opera,但它在Safari中不起作用。 (我也會假設Chrome,但我沒有檢查)。 有什么建議?

提示:我喜歡jQuery。

Webkit有兩個奇怪的事情阻止window.location.hash = location.hash正常工作。

  1. Webkit響應window.location.href而不是window.location.hash (就像所有其他瀏覽器一樣)。 奇怪的是, webkit仍然可以使用location.hash讀取URL的hash標記
  2. Webkit有一個記錄的錯誤,在瀏覽器轉到新位置之前,必須將href location設置為同一位置兩次。 Bug報告在這里

這段代碼解決了我的問題:(使用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;
        }
    }
};

我結束了

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

這在我測試過的所有桌面瀏覽器以及iOS和Android chrome上運行良好。

go_hash('#home')

功能...

function go_hash(hash) {
  console.log('go_hash: ' + hash)
  if(hash.indexOf('#') == -1)
    hash = '#' + hash
  if(document.location.hash) {
    document.location.hash = hash
    return
  }
  if(window.location.hash) {
    window.location.hash = hash
    return
  }
  if(document.location.href) {
    document.location.href = hash
    return
  }
  window.location.href = hash
}

首先將location.hash設置為其他內容並立即將其設置回來。

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

在JavaScript更改原始哈希位置之前,使用獲取滾動位置

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

如果要還原滾動位置,請使用

$(window).scrollTop(st);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM