我正在开发一个web应用程序。其中有一个名为“分类”的部分,每当用户单击其中一个分类时,更新面板会加载相应的内容。
在用户点击分类后,我想要更改浏览器地址栏中的URL,将其从原来的地址改变为
www.mysite.com/products
翻译成像这样的格式
www.mysite.com/products/{selectedCat}
有没有某种JavaScript API可以实现不刷新页面的效果?
我正在开发一个web应用程序。其中有一个名为“分类”的部分,每当用户单击其中一个分类时,更新面板会加载相应的内容。
在用户点击分类后,我想要更改浏览器地址栏中的URL,将其从原来的地址改变为
www.mysite.com/products
翻译成像这样的格式
www.mysite.com/products/{selectedCat}
有没有某种JavaScript API可以实现不刷新页面的效果?
使用HTML5,您可以在不重新加载页面的情况下修改URL:
如果您想要在浏览器历史记录中创建新的记录(即后退按钮可用),
window.history.pushState('Object', 'Title', '/new-url');
如果您只想更改URL而不能返回,请使用以下代码:window.history.replaceState('Object', 'Title', '/another-new-url');
该对象可用于ajax导航:
window.history.pushState({ id: 35 }, 'Viewing item #35', '/item/35');
window.onpopstate = function (e) {
var id = e.state.id;
load_item(id);
};
除了之前提到的,要在onclick函数中编辑window.location.hash属性以匹配你想要的URL。
window.location.hash = 'category-name'; // address bar would become http://example.com/#category-name
我认为直接在地址栏中操纵完全不同的URL而不移动到该URL是不允许的,出于安全考虑。如果您希望它是
www.mysite.com/products/#{selectedCat}
即在同一页面内的锚点链接,则可以查看现在大多数JavaScript库中存在的各种历史记录/“返回按钮”脚本。
提到更新面板,我猜您正在使用Asp.net,在这种情况下,Asp.net Ajax历史记录控件是一个很好的起点。
我认为这是不可能的(至少是完全更改地址),因为这将是地址栏的一个不直观的误用,可能会促进网络钓鱼攻击。
按照你的说法是无法完成的。somej.net 建议的方法是最接近的。在 AJAX 时代,这实际上是非常普遍的做法。甚至 Gmail 也使用了这种方法。
"window.location.hash"
正如sanchothefat所建议的那样,这应该是唯一的做法。因为我看到的所有地方都是在URL的#后面使用此功能。
路径
和/或查询字符串
,但无法更改协议、域名或端口(因为那样会导致安全问题,正如其他人所指出的)。上面的hash
函数可以更改锚点(或片段标识符)。 - Chris S