Angular.js: 已解码和未编码 url 的 $location 问题

创建于 2017-07-11  ·  4评论  ·  资料来源: angular/angular.js

我正在提交一个...

  • [x] 错误报告
  • [ ] 功能要求
  • [ ] 其他(请不要在此处提交支持请求(见上文))

当前行为:

嗨,大家好。
在我为修复包含撇号的 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 可以从不同的来源设置,并不总是使用相同的编码/解码

$location low broken expected use bug

最有用的评论

我们已经使用浏览器<a href>部分修复了这个问题,以规范几个关键区域的 URL(https://github.com/angular/angular.js/commit/e68697e2e30695f509e6c2c1e43c2c02b7af41f0,https://github.com/ angular/angular.js/commit/2f72a69ded53a122afad3ec28d91f9bd2f41eb4f)。 然而,没有浏览器使用这种方法标准化所有内容。 为了真正解决这个问题,我们需要自己实现规范化。

实现了一个 POC来手动进行标准化,但是我们认为此时这改变太大了。 在该提交中添加的测试中的 FYI 15 目前在 chrome 中失败。

由于这些原因,我们将把它置于“无法修复”状态。

所有4条评论

@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 中失败。

由于这些原因,我们将把它置于“无法修复”状态。

此页面是否有帮助?
0 / 5 - 0 等级