如何编写一个JavaScript动作,既可以在当前页面上产生一些效果,又可以更改浏览器中的URL,以便用户在单击刷新或添加书签时使用新的URL?
如果返回上一页,最好能够重新加载原始URL。
我试图在URL中记录JavaScript状态。
如何编写一个JavaScript动作,既可以在当前页面上产生一些效果,又可以更改浏览器中的URL,以便用户在单击刷新或添加书签时使用新的URL?
如果返回上一页,最好能够重新加载原始URL。
我试图在URL中记录JavaScript状态。
history.pushState
和 history.popState
的浏览器中工作,那么“旧”方法是设置片段标识符,这不会导致页面重新加载。window.location.hash
属性设置为包含所需状态信息的值,然后使用 window.onhashchange 事件,或者对于不支持 onhashchange
的旧浏览器(IE < 8、Firefox < 3.6),定期检查哈希是否已更改(例如使用 setInterval
),并更新页面。还需要在页面加载时检查哈希值以设置初始内容。setInterval
来检查document.location.hash
,可以使用更受欢迎的hashchange
事件。在此处检查各个浏览器支持的标准。我目前的做法是在支持它的浏览器上使用push/popState。对于其他浏览器,我设置哈希并仅在支持该功能的浏览器中监视hashchange
。这将使IE<=7无法使用历史记录,但可以使用有用的永久链接。但是,谁会在意IE<=7的历史记录呢? - Irae Carvalho_trackPageview
并使用新页面的“真实”URL。 - Matthew Crumley使用 HTML 5,可以使用 history.pushState
函数。例如:
<script type="text/javascript">
var stateObj = { foo: "bar" };
function change_my_url()
{
history.pushState(stateObj, "page 2", "bar.html");
}
var link = document.getElementById('click');
link.addEventListener('click', change_my_url, false);
</script>
和 a href:
<a href="#" id='click'>Click to change url to bar.html</a>
如果你想要改变URL但不想在后退按钮列表中增加一个条目,可以使用history.replaceState
代替。window.location.href包含当前URL。您可以从中读取,可以添加内容,也可以替换它,但这可能导致页面重新加载。
如果您希望在URL中记录JavaScript状态以便将其添加到书签中,而无需重新加载页面,则可以在#后将其附加到当前URL,并让一个由onload事件触发的JavaScript代码段解析当前URL以查看其是否包含保存的状态。
如果使用? 而非#,则会强制重新加载页面,但由于您将在加载时解析已保存的状态,因此实际上可能并非问题;此外,这也将使前进和后退按钮正常工作。
history.pushState()
来更改URL地址。 - Derek 朕會功夫jQuery有一个非常好的插件,可以改变浏览器的URL,叫做jQuery-pusher。
JavaScript pushState
和jQuery可以一起使用,例如:
history.pushState(null, null, $(this).attr('href'));
示例:
$('a').click(function (event) {
// Prevent default click action
event.preventDefault();
// Detect if pushState is available
if(history.pushState) {
history.pushState(null, null, $(this).attr('href'));
}
return false;
});
只使用 JavaScript 的 history.pushState() 方法可以改变引用页,即在更改状态后创建的 XMLHttpRequest 对象中使用的 HTTP 标头所使用的引用页。pushState() 方法有三个参数:状态对象、标题和 URL(可选)。状态对象是一个与 pushState() 创建的新历史记录条目相关联的 JavaScript 对象。标题当前被忽略,URL 是新历史记录条目的 URL。这个方法不会尝试加载 URL。如果没有指定 URL,则将其设置为文档的当前 URL。新 URL 不需要是绝对的;如果它是相对的,则相对于当前 URL 解析它。新 URL 必须与当前 URL 同源;否则,pushState() 将抛出一个异常。/photo.php?fbid=496429237507&set=a.218088072507.133423.681812507&pid=5887027&id=681812507
/photo.php?fbid=496429237507&set=a.218088072507.133423.681812507&pid=5887027&id=681812507#!/photo.php?fbid=496435457507&set=a.218088072507.133423.681812507&pid=5887085&id=681812507
A more simple answer i present,
window.history.pushState(null, null, "/abc")
这将在浏览器URL中的域名后添加/abc
。只需复制此代码并粘贴到浏览器控制台中,即可看到URL更改为"https://stackoverflow.com/abc"。
pushState
з”Ёжі•пјљfor(i=1;i<50;i++){var txt="..................................................";txt=txt.slice(0,i)+"HTML5"+txt.slice(i,txt.length);history.pushState({}, "html5", txt);}
- Derek 朕會功夫