我正在提交一个...
当前行为:
嗨,大家好。
在我为修复包含撇号的 url 的 $location 服务中的错误进行了讨论之后, @gkalpak注意到 url 中的
有关更多详细信息,请参阅 PR。 https://github.com/angular/angular.js/pull/16098
预期/新行为:
未解码和解码的 url 应该使用 $location 服务
角度版本: 1.x。
浏览器:全部
还要别的吗:
如何修复
在src/ng/browser.js 中有一个函数fireStateOrUrlChange有这个验证
if (lastBrowserUrl === self.url() && prevLastHistoryState === cachedState) {{
返回;
}
主要问题似乎是我们正在将 self.url() 与 lastBrowserUrl 进行比较,但是 lastBrowserUrl 可以从不同的来源设置,并不总是使用相同的编码/解码
@gkalpak您的意思是(根据您的评论)在$browser.url
内执行诸如url = urlResolve(url).href
之类的操作,或者将所有调用更改为$browser.url(val)
以保持一致? 添加urlResolve
似乎有效,尽管更改了一些测试(一些 URL 现在以/
结尾)。
@jbedard ,我没有仔细考虑实现细节。 我指的是最终结果 :grin:
@dmartres您能否确认这在 1.7.3 中是否仍然存在? 我认为 aee7d53a6b5d3d7bc0a1124fd3df9b263777e72e (fixing #16592) 可能已经解决了这个问题?
我们已经使用浏览器<a href>
部分修复了这个问题,以规范几个关键区域的 URL(https://github.com/angular/angular.js/commit/e68697e2e30695f509e6c2c1e43c2c02b7af41f0,https://github.com/ angular/angular.js/commit/2f72a69ded53a122afad3ec28d91f9bd2f41eb4f)。 然而,没有浏览器使用这种方法标准化所有内容。 为了真正解决这个问题,我们需要自己实现规范化。
我实现了一个 POC来手动进行标准化,但是我们认为此时这改变太大了。 在该提交中添加的测试中的 FYI 15 目前在 chrome 中失败。
由于这些原因,我们将把它置于“无法修复”状态。
最有用的评论
我们已经使用浏览器
<a href>
部分修复了这个问题,以规范几个关键区域的 URL(https://github.com/angular/angular.js/commit/e68697e2e30695f509e6c2c1e43c2c02b7af41f0,https://github.com/ angular/angular.js/commit/2f72a69ded53a122afad3ec28d91f9bd2f41eb4f)。 然而,没有浏览器使用这种方法标准化所有内容。 为了真正解决这个问题,我们需要自己实现规范化。我实现了一个 POC来手动进行标准化,但是我们认为此时这改变太大了。 在该提交中添加的测试中的 FYI 15 目前在 chrome 中失败。
由于这些原因,我们将把它置于“无法修复”状态。