2

尝试使用ng-bind-htmlAngularJS 将 iframe 插入页面,但即使是最简单的形式,我也无法让它工作。

Javascript

function Ctrl($scope) {
   $scope.showIt = '<iframe src="http://www.anything.com"></iframe>';
}

我的 HTML:

<div ng-bind-html="showIt"></div>
4

1 回答 1

8

您需要使用$sce服务来告诉 Angular 在视图上呈现 html 内容

角文档说

$sce 是一项为 AngularJS提供严格上下文转义服务的服务。SCE 以以下方式协助编写代码:(a) 默认情况下是安全的,(b) 使对 XSS、点击劫持等安全漏洞的审计变得更加容易。

在执行此操作之前,您需要ngSanitize在应用程序中注入依赖项

您可以通过两种方式使用filtercontroller

HTML

<div ng-app="app" ng-controller="mainCtrl">
    Using Filter
    <div ng-bind-html="showIt | toTrusted"></div>
    Using Controller
    <div ng-bind-html="htmlSafe(showIt)"></div>
</div>

JavaScript 代码

var app = angular.module('app', ['ngSanitize']).
controller('mainCtrl', function ($scope, $sce) {
    $scope.showIt = '<iframe src="http://www.anything.com"></iframe>';
    $scope.htmlSafe = function (data) {
        return $sce.trustAsHtml(data);
    }
}).
filter('toTrusted', function ($sce) {
    return function (value) {
        return $sce.trustAsHtml(value);
    };
});

从 angular 1.2 开始,$sce 功能为以下版本启用,您应该在 angular 的配置阶段启用/禁用它。

app.config(['$sceProvider', function($sceProvider) {
    $sceProvider.enabled(true);
}]);

这是工作小提琴

于 2015-01-20T17:08:19.590 回答