私は、ユーザーがリンクをクリックしたときにXMLHttpRequestsを使用してウェブページの一部をリクエストするウェブサイトを持っています。AJAXページload/history.pushStateがウェブサイトからナビゲートした後正しく動作しない
関連するコード:リンクをクリックしたときに、
function requestPage(url, push) {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState === 4) {
main.innerHTML = xhr.responseText;
attachLinkClickHandlers(main); // `main` = container element
if (push)
window.history.pushState(url, title, url);
}
};
xhr.open('GET', url);
xhr.setRequestHeader('Content-Only', 1); // Server responds to Content-Only header by not sending everything surrounding the main content.
xhr.send();
}
window.addEventListener('popstate', function (e) {
var page = e.state;
requestPage(page, false);
});
window.history.replaceState(location.href, document.title, location.href);
attachLinkClickHandlers(document);
:
requestPage(link.href, true);
例サーバの応答:
通常要求応答:
<!doctype html>
<html>
<head>
...stuff...
</head>
<body>
...stuff...
<main>
<h1>Content</h1>
<p>Content Content</p>
</main>
...stuff...
</body>
</html>
Content-Only
ヘッダが設定された
応答:
<h1>Content</h1>
<p>Content Content</p>
すべてが意図したとおりに動作します(内のページの読み込み、戻る/進むボタンナビゲーションサイト)、除く...私はをクリックすると外部リンク(クリックハンドラが添付されていないため、クロスオリジンであるため)、ブラウザの「戻る」ボタンを押すと、XHRの応答となるものが挨拶されます。単に内容は<html>
、<head>
、または<body>
というタグで、CSSまたはJavaScriptのいずれも意味しません。
この場合、ブラウザにフルページをロードさせるにはどうすればよいですか?
ありがとうございます! – Hatchet