JavaScript には、通常のページ ジャンプであっても、シングルページ アプリケーションのハッシュ値の変更であっても、ブラウザーの履歴を操作できるメソッドが多数あります。特に単一ページ アプリケーションでは、これらのメソッドを使用することが、ページ ルーティングのほぼ中心的な方法となります。この記事では、これらの方法について詳しく説明します。
location は最も便利な BOM オブジェクトの 1 つで、現在のウィンドウにロードされているドキュメントに関する情報を提供し、いくつかのナビゲーション機能も提供します。実際、場所オブジェクトは、ウィンドウ オブジェクトのプロパティとドキュメント オブジェクトのプロパティの両方です。つまり、window.location と document.location は同じオブジェクトです。非ブラウザーのドキュメント環境に適応するには、document.location を使用することをお勧めします。
a タグに設定された href 属性を除いて、最も一般的に使用されるジャンプ メソッドは次のとおりです: window.location.href="xxx"; 実際、上記のコードは実際に location.assign メソッドを実行します。つまり、次の 3 つの URL ジャンプの記述方法はまったく同じです。これらはすぐに新しい URL を開き、ブラウザーの履歴にレコードを生成します。
document.location.assign("xxx");document.location="xxx";document.location.href="xxx";
この方法でジャンプした場合、URL が現在の URL とまったく同じである場合、ページは更新されますが、ブラウザ履歴は追加されません。
この関数は location.href="xxx";
とほぼ同じですが、唯一の違いは、location.replace はブラウザの履歴にレコードを生成し、Replace はブラウザの履歴にレコードを生成することです。前回の記録。たとえば、「a.html」ページを開くと、ページ内に次の 2 行のコードがあります: location.href=”xxx”;
完全相同,只有一个区别,location.replace会在浏览器的历史记录中生成一条记录,并替换前一条记录。举个例子,当我们打开“a.html”页面,页面内有如下两行代码:
document.location.href="c.html";document.location.replace("b.html");
浏览器先通过location.href
的方式跳转到c.html,接着又使用location.replace
跳转到b.html。此时点击浏览器的后退按钮,浏览器会直接返回a.html,因为c.html这条历史记录被replace覆盖了。
我们可以通过如下代码形式来监听浏览器URL的哈希值变化:
window.addEventListener("hashchange",function(){ //do something },false);//以下代码都会触发hashchange事件 document.location.hash="#a=1";document.location.href="b.html#b=1";document.location.replace("c.html#c=1");
当我们通过改写location的方式引起浏览器URL哈希值变化时,hashchange事件就会触发。如果URL重写导致了页面刷新(例如改变了URL查询参数,或者直接跳向一个跨域地址),hashchange事件会直接被跳过。请注意,URL哈希值变化不一定总是会触发hashchange事件,下面要介绍的方法就是改动URL但不触发hashchange。
pushState方法接收三个参数:一个记录历史状态的对象(该对象会在popstate事件触发时被传入,有640K的大小限制);一个代表历史记录标题的字符串;一个与当前URL同源的地址。典型的使用方式如下:
history.pushState({}, "", "b.html");
history.pushState()
方法会将URL设置为一个同源URL值,在此之后发送的Ajax请求的Referrer头部都会使用这个新的值,同时在浏览器历史记录中生成一条新的历史记录。但是pushState方法不会刷新页面,pushState引起的URL哈希值变化也不会触发hashchange事件。pushState如果设置了一条与当前URL完全相同的地址,浏览器的历史记录中仍然会新增一条记录。
该方法与history.pushState
基本相同,唯一的区别就是replaceState会像location.replace
window.addEventListener("popstate",function(event){ //do something},false);
location.href
を介して c.html にジャンプします。 location.replace
を使用して b.html にジャンプします。このとき、ブラウザの戻るボタンをクリックすると、c.htmlの履歴が置換により上書きされているため、ブラウザは直接a.htmlに戻ります。 document.location.assign("xxx");document.location="xxx";document.location.href="xxx";
4.history.pushState
document.location.href="c.html";document.location.replace("b.html");
history.pushState()
メソッドは URL を同じオリジン URL 値に設定し、この後に送信される Ajax リクエストの Referrer ヘッダーはこの新しい値を使用します。そしてブラウザ履歴に新しい履歴レコードを生成します。ただし、pushState メソッドはページを更新せず、pushState による URL ハッシュ値の変更は hashchange イベントをトリガーしません。 PushState が現在の URL とまったく同じアドレスを設定した場合でも、新しいレコードがブラウザーの履歴に追加されます。
history.pushState
と同じです。唯一の違いは、replaceState が location.replace
のように前の履歴レコードを上書きすることです。 。 🎜history.pushState とhistory.replaceState の詳細: 🎜http://www.php.cn/🎜🎜6.window.onpopstate🎜🎜次のコード フォームを通じてブラウザの Popstate イベントをリッスンできます: 🎜window.addEventListener("hashchange",function(){ //do something },false);//以下代码都会触发hashchange事件 document.location.hash="#a=1";document.location.href="b.html#b=1";document.location.replace("c.html#c=1");
location是最有用的BOM对象之一,它提供了与当前窗口中加载的文档有关的信息,还提供了一些导航功能。事实上,location对象既是window对象的属性,又是document对象的属性。换句话说,window.location和document.location是同一个对象。这里推荐大家使用document.location的写法,以适应非浏览器文档环境。
除去为a标签设置的href属性,大家最常用的跳转方式一定就是:window.location.href=”xxx”;实际上,上面这句代码真正执行的是location.assign方法。简而言之,下面三中URL跳转的写法完全等同,都会立即打开新的URL并在浏览器的历史记录中生成一条记录:
document.location.assign("xxx");document.location="xxx";document.location.href="xxx";
需要注意的是,如果通过这种方式跳转的URL与当前URL完全相同,则页面会刷新,但是浏览器历史记录不会新增。
功能几乎与location.href=”xxx”;
完全相同,只有一个区别,location.replace会在浏览器的历史记录中生成一条记录,并替换前一条记录。举个例子,当我们打开“a.html”页面,页面内有如下两行代码:
document.location.href="c.html";document.location.replace("b.html");
浏览器先通过location.href
的方式跳转到c.html,接着又使用location.replace
跳转到b.html。此时点击浏览器的后退按钮,浏览器会直接返回a.html,因为c.html这条历史记录被replace覆盖了。
我们可以通过如下代码形式来监听浏览器URL的哈希值变化:
window.addEventListener("hashchange",function(){ //do something },false);//以下代码都会触发hashchange事件 document.location.hash="#a=1";document.location.href="b.html#b=1";document.location.replace("c.html#c=1");
当我们通过改写location的方式引起浏览器URL哈希值变化时,hashchange事件就会触发。如果URL重写导致了页面刷新(例如改变了URL查询参数,或者直接跳向一个跨域地址),hashchange事件会直接被跳过。请注意,URL哈希值变化不一定总是会触发hashchange事件,下面要介绍的方法就是改动URL但不触发hashchange。
pushState方法接收三个参数:一个记录历史状态的对象(该对象会在popstate事件触发时被传入,有640K的大小限制);一个代表历史记录标题的字符串;一个与当前URL同源的地址。典型的使用方式如下:
history.pushState({}, "", "b.html");
history.pushState()
方法会将URL设置为一个同源URL值,在此之后发送的Ajax请求的Referrer头部都会使用这个新的值,同时在浏览器历史记录中生成一条新的历史记录。但是pushState方法不会刷新页面,pushState引起的URL哈希值变化也不会触发hashchange事件。pushState如果设置了一条与当前URL完全相同的地址,浏览器的历史记录中仍然会新增一条记录。
该方法与history.pushState
基本相同,唯一的区别就是replaceState会像location.replace
一样覆盖先前历史记录。
关于history.pushState和history.replaceState的更多介绍:
http://www.php.cn/
我们可以通过如下代码形式来监听浏览器的popstate事件:
window.addEventListener("popstate",function(event){ //do something},false);
与hashchange事件类似,popstate会在任何URL变化时触发(hashchange只会在哈希值变化时触发),并且history.pushState和history.replaceState也不会触发popstate事件。只有在浏览器后退、前进、重写哈希值的情况下才会触发popstate事件。如果URL重写导致了页面刷新(例如改变了URL查询参数,或者直接跳向一个跨域地址),popstate事件会直接被跳过。
这里请注意一下代码中传给事件函数的参数“event”,event参数中包含state对象,这个state对象就是在调用history.pushState和history.replaceState方法是传入的第一个状态参数,我们可以通过这种状态传递方式来对历史记录进行一定处理。
以上就是详解JavaScript操作URL的方法(单页应用常用)的内容,更多相关内容请关注PHP中文网(www.php.cn)!