【问题标题】:Firefox: AngularJS app in iframe throws nsresult: "0x80004005 (NS_ERROR_FAILURE)" error onFirefox:iframe 中的 AngularJS 应用程序抛出 nsresult:“0x80004005 (NS_ERROR_FAILURE)”错误
【发布时间】:2015-02-10 17:05:42
【问题描述】:

当我在页面上的 iframe 中打开 angularjs 应用程序时,在所有浏览器上一切正常。但是然后在 Firefox 中,如果我 使用 ctrl+f5 刷新 我会收到这个非常讨厌的错误,从 nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame" ...

请看图片:(不确定您是否可以准确阅读它)

你可以自己测试,在firefox中打开链接https://www.ipushpull.com/embed/SCAR/Alpine,你应该看到登录表单,按ctrl+f5,你应该会看到错误。

其他浏览器都可以。

我很少看到其他讨论,有人提到这可能是因为 CORS 请求(我正在使用),我认为这不太可能,因为其他请求在同一页面上的 Firefox 中运行良好(当您打开 taht 页面时,它会发出请求返回应该返回的 api)

其他人提到它与窗口历史记录有关,这可能是因为一旦您到达该链接并且 API 返回 403,它会将您重定向到 angular uri #/user/login ,但我没有找到任何可以尝试的解决方案与历史相提并论。

有什么想法吗?非常感谢

更新

我看到你无法打开图像,这里是“全分辨率”:http://i.stack.imgur.com/7SYQ8.jpg

更新 2

  1. 这不是由于 CORS 问题。我在整个网站上使用 CORS 没有问题,即使在同一页面上还有其他 CORS 请求并且它们有效。

  2. 这不是任何 adblock/popupblock 插件引起的,我在完全清除的浏览器中尝试过。

  3. 使用非缩小的 Angular 进行调试 - 实际上我认为这对调试并不重要(因为我对 Angular 有信心),但要问什么。如果我更改为未缩小的角度不会发生错误..有什么想法吗?

【问题讨论】:

  • 我真的不喜欢不让你点击后退按钮的网站。这是“更完整”的 rez 文件的正确链接:i.stack.imgur.com/7SYQ8.jpg
  • @Ronnie 实际上,这基本上是您放入网站的嵌入小部件。所以导航完全由应用程序完成。我只是提供了直接链接,因此您可以全屏查看。
  • 啊,明白了。是的,保管箱链接很小。当您通过 SO 上传图像时,它会被上传到 imgur,如果您右键单击它并“查看图像”或“在新标签中打开图像”,它将显示更大的图像。
  • [stackoverflow.com/questions/16101187/…你试过这个吗??
  • 如果尝试调试或让其他人调试,您可能应该从不使用 .min 版本的 Angular 开始

标签: javascript angularjs firefox iframe


【解决方案1】:

我在尝试使用 iframe 中的 history.pushState(Ember 路由器 location: 'history' 路由方法)打开 Ember 应用程序时遇到了类似的问题。似乎只有在 Firefox 中进行硬刷新(Mac 上的cmd + shift + r 或 Windows 上的ctrl + f5)时才会出现此问题。该问题仅在 FireFox 中出现,在 Chrome 和 Safari 中运行良好,具有类似的硬刷新。我还验证了这个问题发生在我身上,以及在 FireFox 的 iframe 中使用 $locationProvider html5mode(它也在后台使用 history.pushState)打开一个 Angular JS 应用程序。

第一次导航到页面或正常刷新页面时(cmd + r Mac、f5 Windows)不会出现此问题。我在 Mozilla 的 Bugzilla 上发现了许多看似相关的东西,但很多都很接近。这似乎代表了我遇到的相同问题,并且在当前版本的 Firefox (在撰写本文时为 v37.0.1)时仍处于打开状态。

https://bugzilla.mozilla.org/show_bug.cgi?id=1003100

在使用基于哈希的路由的 iframe 中打开 Ember 或 Angular 应用程序(或任何技术......)目前似乎是一种可行的解决方法。对于任一框架,我都无法使用基于哈希的路由方法重现该问题。

【讨论】:

  • 这似乎已在 angularJs 1.4 上得到解决。我只在版本 1.2.7 上遇到这种错误
【解决方案2】:

如果您没有在函数本身之后声明服务依赖项列表(在数组中),AngularJS 中的缩小会导致问题。但是,我查看了您的代码,看起来您已经了解了它。我可能在这里遗漏了一些东西,所以最好再看一遍以防万一。

另一方面,它可能是假阴性。在所有依赖项 js 文件完全加载之前刷新页面时,Chrome 中也出现了一些错误。由于您具有 Firebug Persist 模式,因此某些请求不会被取消并导致溢出 exception 就像您附加图像中的第三个一样。

因此,对于此错误,如果您关闭手表,它们应该会消失。

【讨论】:

  • 缩小是 Angular JS 的一个常见陷阱,但与此无关(会导致模块注入错误,本期未讨论类似问题)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-27
  • 1970-01-01
  • 2020-05-14
  • 1970-01-01
  • 2019-01-01
  • 2017-01-13
相关资源
最近更新 更多