【问题标题】:Angular.js, iframes and FirefoxAngular.js、iframe 和 Firefox
【发布时间】:2013-10-19 23:17:37
【问题描述】:

我觉得我错过了一些明显的东西,但我不能让 iframe 在 Firefox 中使用 Angular.js 路由。

Here is a sample plunker code

index.html 文件包含加载 main.htmlng-view

<div>
Main content here
<iframe src="#/child"></iframe>
</div>

iframe 指向/child 路由,$routeProvider 被配置为加载child.html 模板:

angular.module('testappApp', [])
  .config(function ($routeProvider) {
    $routeProvider
      .when('/', {
        templateUrl: 'views/main.html'
      })
      .when('/child', {
        templateUrl: 'views/child.html'
      })
      .otherwise({
        redirectTo: '/'
      });
  });

这适用于 Chrome 和 Safari,但不适用于 Firefox 和 IE 10(我认为早期版本的 IE 也无法使用)。感谢您的帮助,谢谢!

【问题讨论】:

  • 你有特殊要求走这种方式(iframes)还是可以使用其他方式(即:ng-include)?
  • 我需要使用 iframe,因为我需要在一页上有多个独立视图。每个视图都应该有自己的基于导航、历史记录等的面包屑,并能够通过永久链接在单独的页面上打开每个独立视图的每个状态。 iframe 似乎是最自然的选择。
  • 问题更多是使用多个视图,而不是使用 iframe。请查看 AngularUI UI-Router: (github.com/angular-ui/ui-router#multiple--named-views)。它完全符合您的要求。
  • @jpmorin 我考虑过使用 ui-router,实际上我已经基于它构建了一个原型。不幸的是,它不符合我的要求,因为我需要嵌套 states 之类的东西,而不是嵌套视图。这样一个页面将包含 3 个独立状态,更改 1 不会影响其他 2。我不确定这是否可以通过 ui-router 实现。
  • 我们的想法是让一个主要的 Angular 应用程序像您一样在其中运行您的 iframe。您可以通过设置范围变量而不是使用 $routeProvider 来动态更改 iframe 的 src 属性。在每个 iframe 中,您需要创建一个新的 Angular 应用程序,其中包含运行所需的一切(重新加载脚本、css、图像等)。他们的 $routeProvider 将监听 src 属性,因为它是 iframe url。

标签: javascript firefox angularjs iframe routes


【解决方案1】:

@jpmorin 所以,我刚刚找到了一个解决方法,这有点受您之前建议的启发。因此,在我将 iframe 源从 #/child 更改为 index.html/#/child 后,一切正常!不需要包含多个角度等。我不完全理解为什么原始路由在 FF 中失败,而是直接指向引导应用程序的文件,然后添加路由工作。

【讨论】:

  • 类似的东西对我有用——我必须在哈希之前添加斜杠才能在 Firefox 和 IE 11 中工作。
  • 这对我来说不适用于 Angular 1.4.8 + ui-router 0.2.18
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-09
  • 1970-01-01
  • 2011-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-09
相关资源
最近更新 更多