对于新的Web应用程序,我想在用户单击链接时修改历史记录,以便URL更改,但页面不会重新加载。我将在ajax中加载一部分页面。这可以很容易地完成,并记录在很多地方(例如Mozilla,diveintohtml5,Stack Overflow)。
但是,我想知道是否有办法让用户修改URL而不重新加载页面。例如,有人在同一个域中为他们提供了一个链接,或者他们想要出于某种原因手动输入URL。我想以与点击链接相同的方式加载新页面 - 无需重新加载页面而是修改历史记录。
有没有办法做到这一点?这是我思考的要点,但需要实现神奇的函数getNewURLFromEvent
,preventUserFromActuallyLeavingPage
和carryOn
(如果可能):
window.addEventListener('unload', function(event) {
var newURL = getNewURLFromEvent(event);
if (isInThisDomain(newURL)) {
preventUserFromActuallyLeavingPage();
window.history.pushState('content', 'title', document.URL);
} else {
// Let the user leave (the internet is a free place after all)
carryOn();
}
});
function isInThisDomain(URL) {
/* Would probably implement some error checking here too */
var thisDomain = document.URL.match(/:\/\/(.+?)\//)[1],
thatDomain = URL.match(/:\/\/(.+?)\//)[1]);
return thisDomain === thatDomain;
}
function getNewURLFromEvent(e) {
/* Figure out where the user want's to go */
}
function preventUserFromActuallyLeavingPage() {
/* Since we're changing the content it still looks
like the user's leaving, but really they haven't
gone anywhere from the site's perspective */
}
function carryOn() {
/* Essentially do nothing, but maybe more magic is needed? */
}
如果你认为这是一个坏主意 - 但仍然可能 - 请解释为什么这是一个坏主意。
谢谢。
答案 0 :(得分:0)
除了使用URL哈希之外,地址栏的任何更改都将指示浏览器转到该位置。您不能(也不应该)更改此行为。这将打开一大堆关于URL隐藏和其他恶意软件肮脏的蠕虫。