22

我正在尝试使用 Angular 1.2 将 iframe 动态插入到页面中。这是代码:

html:

<div id="player_wrapper" ng-cloak>
    <div ng-bind-html="player"></div>
</div>

js:

$http({method: 'GET', url: url}).
    success(function(data, status) {
        $scope.player = data.html;
    }.......

所以 data.html 是一个字符串,它有一个有效的 HTML 开头

<iframe ...>

该字符串还包含一些 div。所以它可能看起来像:

<iframe src='...' ...></iframe><div>some stuf</div>

我在 app.js 中使用“ngSanitize”。它显示的是 div(在 iframe 之后),而不是 iframe 本身。

如果我使用 jQuery,基本上是一个

$(#'player_wrapper').html(data.html)

工作正常......但试图使其正确的angularJS。

关于为什么只显示 iframe 之后的 div 的任何想法?

非常感谢大家

4

3 回答 3

34

ngBindHtml$sce.getTrustedHtml将在显示之前传递您的 HTML 。我怀疑这会删除你的 iframe。

根据文档,只要您完全信任来自此来源的任何 HTML,您就可以使用$sce.trustAsHtml来避免此检查 - 来自不受信任来源的 iframe 可能会对您页面的访问者造成一些讨厌的事情。

$http({method: 'GET', url: url}).
    success(function(data, status) {
        $scope.player = $sce.trustAsHtml(data.html);
    }.......

当心!:)

于 2013-11-23T19:30:27.433 回答
8

您需要使用ng-bind-html 文档中描述$sce的服务:

$scope.player = $sce.trustAsHtml('your html goes here');

有关示例,请参见此 plunk :

于 2013-11-23T19:40:04.547 回答
4

在经历了很多麻烦之后,我设法获得了一个不错的设置,我可以动态地将 iframe 加载到我的页面中并将信息传递给它。

我把它做成了一个 github 项目。它使用单个指令来传递原始输入元素信息,也ngSanatize用于$sce.trustAsResourceUrl函数。

这是现场演示

于 2014-07-03T19:36:27.293 回答