如何解决jQuery $ .address插件:hashbang链接与HTML5状态支持冲突
|| 这是描述问题的方案: 用户A具有支持HTML5状态的浏览器,并将此链接发送给用户B:http://domain.tld/node
使用不支持HTML 5状态支持的浏览器的用户B导航到另一个节点,并将链接发送回用户A:
http://domain.tld/node#!/another-node
但是,当用户A单击链接时,将显示ѭ2content的内容,而不是/another-node
。
查询Asual \的jQuery$.address()
插件显示它正在将\“ hashbang address \”解释为哈希值:
> $.address.value()
\"/node#/another-node\"
> $.address.path()
\"/node\"
> $.address.hash()
\"/another-node\"
(奇怪的是,“!”已从哈希爆炸中删除。)
更改我的实现方式可以克服这种歧义吗?
如果在URI中发现了hashbang,我可以禁用对历史API的支持,但我宁愿没有。
解决方法
我可以通过稍微更改实现来解决此问题。
基本上,我根据浏览器的功能来确定该地址应该是什么,并对照实际的地址进行检查,如果不匹配,请使用ѭ6替换该地址,而无需创建新的历史记录条目。
var addressValue = $.address.value(),initPath = window.location.pathname.replace(stateBasePath,\"\"),newLocation = baseUrl +stateBasePath + (supports_history_api() ? \"\" : \"/#!\") + (addressValue != \"/\" ? addressValue : initPath + window.location.search);
if (newLocation != window.location.href) {
window.location.replace(newLocation);
}
此代码应在DOM ready函数之外尽快执行。
stateBasePath
等同于you9ѭ所使用的值(如果站点位于文档根目录,则为空字符串)
“ 10”是URI协议和域,例如http://domain.tld
(不带斜线)
supports_history_api()
是马克·皮尔格里姆(Mark Pilgrim)的小事
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。