AngularJS和IFrame srcdoc

时间:2014-01-09 02:04:40

标签: javascript angularjs iframe

我从服务器解析了一堆电子邮件,现在我想将它们显示在网页上。我得到了他们的HTML内容,我认为IFrame是显示电子邮件的最简单方式,因为它们是要显示的。

然而,

<iframe srcdoc="{{ email.html }}" frameborder="0"></iframe>

给我以下AngularJS错误:

Error: [$interpolate:interr] Can't interpolate: {{ email.html }}
Error: [$sce:unsafe] Attempting to use an unsafe value in a safe context.

我一直在寻找一种方法来做到这一点,尝试禁用$ sce作为测试,但这也不起作用。这只是一个测试项目,我得到的数据是安全的,我只是需要它来进行POC。

我现在在我的控制器中这样做了:

var iframeDocument = document.querySelector('#myiframe').contentWindow.document;
var content = $scope.email.html;
iframeDocument.open('text/html', 'replace');
iframeDocument.write(content);
iframeDocument.close();

这有效,但如果有解决方案,我仍然更愿意通过数据绑定来实现这一目标?感谢。

2 个答案:

答案 0 :(得分:7)

添加过滤器以使值受信任:

angular.module('app').filter('toTrusted', ['$sce', function($sce) {
    return function(text) {
        return $sce.trustAsHtml(text);
    };
}]);

然后应用过滤器:

<iframe srcdoc="{{email.html | toTrusted}}" frameborder="0"></iframe>

完整代码:http://jsfiddle.net/2bvktbLr/1/

答案 1 :(得分:2)

尝试在您的应用中添加 ngSanitize 作为依赖项。

此处您有更多信息:http://docs.angularjs.org/api/ngSanitize