2

次のページがあります。

<head>
<script type="text/javascript">
  $(document).ready(function(){
    var hash = window.location.hash;
    var src = hash.substring(1); //remove #
    window.location.hash = "";
    if(src != ''){
      frames['principal'].document.location.href = decodeURIComponent(src);
    }
  });  
</script>
</head>
<frameset rows="18%,*" class="pagecontainer">
  <frame name="top" noresize src="site/paginatop.htm" target="top" scrolling="no" frameborder="0"/>
  <frameset cols="11%,*">
    <frame name="lateral" noresize src="site/paginalateral.htm" target="lateral" frameborder="0"/>
    <frame name="principal" id="principal" noresize src="site/paginahome.htm" target="principal" frameborder="0"/>
  </frameset>
</frameset>

ハッシュに URL を含むページを読み込むと、フレーム [プリンシパル] 内にハッシュが読み込まれます。
ただし、ハッシュをクリアすると (window.location.hash = "";)、Chrome と Safari はページをリロードするため、frame[principal] は既定値 (site/paginahome.htm) を取得します。その動作を報告するバグを既に見つけましたhttps://bugs.webkit.org/show_bug.cgi?id=24578
回避策があれば大歓迎です!

前もって感謝します。

解決するwindow.history.replaceStateに関する
問題の解決策を見つけました:

$(document).ready(function(){
  var src = getHash();
  if(src != ''){
    frames['principal'].document.location.href = decodeURIComponent(src);
    var strBrowser = navigator.userAgent.toLowerCase();
    if (strBrowser.indexOf('chrome') > 0 || strBrowser.indexOf('safari') > 0) {
      if(history.pushState) {
        window.history.replaceState(null, window.document.title, '#');
      }
    }
    else {
      window.location.hash = "";
    }
  }
  setFavicon();
});
4

1 に答える 1

0

Chrome ではwindow.location.hash = ""、ページをリロードしません。一番上にスクロールするだけです。

しかし、おそらくハッシュよりも POST を使用する方が問題の解決策として優れているでしょう。

于 2012-08-08T15:03:00.700 に答える