我在iframe中使用ng-src时遇到问题。我需要这样做:
<div class="tab-content">
<ul class="nav nav-tabs" ng-repeat="document in issues.Document">
<div class="tab-pane pdf-height col-md-5 padding_0" id="{{document.name}}">
<iframe ng-src="http://192.168.223.110/cat/{{document.directory}}/{{document.name}}.{{document.type}}" height="100%" width="100%"></iframe>
</div>
</ul>
</div>
结果:
<iframe ng-src="http://192.168.223.110/cat/{{document.directory}}/{{document.name}}.{{document.type}}" height="100%" width="100%" src="http://192.168.223.110/cat/{{document.directory}}/{{document.name}}.{{document.type}}"></iframe>
我知道问题是$ sce,这是对XSS的保护,并且需要将链接添加到白名单......所以当我这样做时它正在工作。
<ul class="nav nav-tabs" ng-repeat="document in issues.Document">
<div class="tab-pane pdf-height col-md-5 padding_0" id="{{document.name}}">
<iframe ng-src="{{someUrl}}" height="100%" width="100%"></iframe>
</div>
</ul>
我在控制器内定义:
$rootScope.someUrl = $sce.trustAsResourceUrl('http://192.168.223.110/cat/files/incoming/12345_3232ASD_pero.pdf');
但是我不能这样做因为我用ng-repeat循环,所以链接是动态生成的。需要从数据库中读取它!
答案 0 :(得分:78)
您可以使用过滤器:
HTML:
<iframe src="{{yourURL | trustAsResourceUrl}}"></iframe>
其中&#39; yourURL&#39;是iframe和&lt; trustAsResourceUrl&#39;的网址。是过滤器,并在某些模块(例如,filters-module)中定义为:
JS:
angular.module('filters-module', [])
.filter('trustAsResourceUrl', ['$sce', function($sce) {
return function(val) {
return $sce.trustAsResourceUrl(val);
};
}])
您可以在应用程序的所有iframe和其他嵌入项中使用此过滤器。 此过滤器将通过添加过滤器来处理您需要信任的所有网址。
答案 1 :(得分:4)
好的,我发现问题是什么.. 谢谢你的过滤器现在正在使用:)
我需要做的就是创建ng-src链接:
<iframe ng-src="{{apiUrl+document.directory + '/' + document.name + '.'+ document.type | trustAsResourceUrl}}" height="100%" width="100%"></iframe>
也许这对某人有帮助! :)
答案 2 :(得分:1)
正如Kop4lyf所说 你需要在js中添加过滤器
//Create a filter for trust url
app.filter('trustAsResourceUrl', ['$sce', function($sce) {
return function(val) {
return $sce.trustAsResourceUrl(val);
};
}]);
并输出ih html为
ng-src="{{x.title.rendered | trustAsResourceUrl}}"
其他一些过滤器:
//Create a filter for trust html
app.filter('trustAsHtml', ['$sce', function($sce) {
return function(val) {
return $sce.trustAsHtml(val);
};
}]);