由于编码不匹配,Backbone.js加载URL两次

ykejflvf  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(106)

我仍然在使用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":"Viktor"}并保存它,然后触发一个hashchange事件,该事件调用Backbone.history.checkUrl()Backbone.history.checkUrl()间接调用Backbone.history.getHash()并从window.location.href返回哈希值#{%22name%22:%22Viktor%22},但这只是部分解码,至少在Chrome中是这样。
这会导致以下检查失败:

if (current === this.fragment) return false;

因为#{"name":"Viktor"}不等于#{%22name%22:%22Viktor%22}。我想这就是问题的要点。如果我覆盖Backbone.history.getHash()并将%22替换为",我的问题就解决了,但我觉得我应该做些不同的事情?
先谢谢你!

yvfmudvl

yvfmudvl1#

你的问题is a bug在 Backbone 网1.4修复,所以我会建议更新你的 Backbone 网版本。
我认为唯一能解决这个问题的方法就是像你一样修补 Backbone.js 。

相关问题