由于编码不匹配,Backbone.js加载URL两次
我仍然在使用Backbone.js,当散列中有JSON时,URL加载两次(至少在Chrome中)会遇到一些问题 假设我想导航到此哈希:由于编码不匹配,Backbone.js加载URL两次,backbone.js,Backbone.js,我仍然在使用Backbone.js,当散列中有JSON时,URL加载两次(至少在Chrome中)会遇到一些问题 假设我想导航到此哈希:{“name”:“Viktor”}。使用encodeURIComponent(“{”name:“Viktor”}”)对其编码后它将变成%7B%22name%22%3A%22Viktor%22%7D 如果我然后尝试导航到哈希,如this.navigate(“%7B%22name%22%3A%22Viktor%22%7D”)Backbone将哈希解码为{“name”:
{“name”:“Viktor”}
。使用encodeURIComponent(“{”name:“Viktor”}”)对其编码后
它将变成%7B%22name%22%3A%22Viktor%22%7D
如果我然后尝试导航到哈希,如this.navigate(“%7B%22name%22%3A%22Viktor%22%7D”)
Backbone将哈希解码为{“name”:“Viktor”}
。然后触发一个hashchange
事件,该事件调用Backbone.history.checkUrl()
,该事件间接调用Backbone.history.getHash()
,并从window.location.href
返回hash{%22name%22:%22Viktor%22}
,但这只是部分解码,至少在Chrome中是这样
这会导致以下检查失败:
if (current === this.fragment) return false;
因为{“name”:“Viktor”}
不等于{%22name%22:%22Viktor%22}
。我认为这就是问题的要点。如果我重写Backbone.history.getHash()
并将%22
替换为“
我的问题解决了,但我觉得我应该做些不同的事情
提前感谢您!您的问题已在主干网1.4中修复,因此我建议您更新主干网版本
我认为唯一可以解决这个问题的方法就是像你一样修补主干。为什么,谢谢!我在谷歌上搜索了很多次,但没有发现这个问题。我还比较了我们上一次使用的v1.3.0和v1.4版本之间的代码,但没有发现任何问题。