如何使用 $sce 插入带有 angular.js 的 iframe?

Posted

技术标签:

【中文标题】如何使用 $sce 插入带有 angular.js 的 iframe?【英文标题】:How to insert an iframe with angular.js using $sce? 【发布时间】:2014-11-28 04:58:47 【问题描述】:

我正在尝试插入整个 iframe 并将其输出到 html。它必须是 iframe 的原因是因为我有一个函数可以处理多个视频嵌入,如 youtube、vine 等 - 它们都有不同的标签。

所以我想做的是:

输入:

var html = '<iframe src="//www.youtube.com/embed/dQw4w9WgXcQ" frameborder="0" allowfullscreen></iframe>';

$scope.video_element = $sce.trustAsHtml(html);

在控制器上:

<div ng-bind-html="video_element"></div>

我希望 iframe 在 div 内作为一个整体输出。很多时候,它只是输出一个 n '[object HTMLIFrameElement]' 而不是实际的 iframe。任何人都可以指导我正确的方向吗? plunkr 会很棒。

谢谢。

【问题讨论】:

您好,我的回答解决了您的问题吗? 【参考方案1】:

在我的情况下,这对我有用,一个自定义过滤器

app.filter('iframe', ['$sce', function($sce) 
return function(input) 
        input = $sce.trustAsResourceUrl(input);
        return input;
    ;
]);

【讨论】:

【参考方案2】:

为此,您将需要一个自定义指令。

app.directive('mySrc', ['$sce', function($sce) 
    return function(scope, element, attr) 
        scope.$watch($sce.trustAsUrl(attr.mySrc), function(value) 
            $(element).attr(src: attr.mySrc || '');
        );
    ;
])

然后

<iframe my-src="//www.youtube.com/embed/dQw4w9WgXcQ"></iframe>

【讨论】:

【参考方案3】:

我建议为此使用指令,这就是 AngularJS 建议将特殊行为附加到 DOM 元素的方法。

我用这个解决方案创建了一个 Plunkr,检查一下:iframe from a directive。

如果这能解决您的问题,请告诉我。

app.directive('iframeDirective', ['$sce', function($sce) 
return 
    restrict: 'E',
    template: '<iframe src=" trustedUrl " frameborder="0" allowfullscreen></iframe>',
    link: function(scope) 
      scope.trustedUrl = $sce.trustAsResourceUrl("//www.youtube.com/embed/dQw4w9WgXcQ");
    
  
]);

【讨论】:

以上是关于如何使用 $sce 插入带有 angular.js 的 iframe?的主要内容,如果未能解决你的问题,请参考以下文章

使用带有 JWT Auth/Laravel 的 Angular JS 获取新的刷新令牌后,如何恢复/重新发送请求?

如何使用 Angular js 制作搜索类型下拉列表?

带有(ES6)类和继承的Angular.js DI

带有 mvc 和 Angular js 的 DevExpress 报告

如何使用 angular.js 推送通知?

如何在 angular.js 中使用令牌管理身份验证?