【问题标题】:iframe not working in AngularJS 1.3.0iframe 在 AngularJS 1.3.0 中不起作用
【发布时间】:2014-07-20 11:03:01
【问题描述】:

我是网络开发新手。我正在使用 AngularJS 1.3.0。当我尝试使用 {{ things[0].embed }} 从我的数据库中插入嵌入的源视频链接时,没有显示任何内容,但对链接进行了硬编码,例如“//www.youtube.com/embed/wZZ7oFKsKzY”,作品。有什么我想念的吗?我是否以某种方式滥用范围? 这是我正在尝试做的另一个例子。如果您将 {{thing[0].embed}} 替换为 youtube 链接,它就可以工作。为什么不将 {{thing[0].embed}} 替换为链接? http://plnkr.co/edit/Udml7NIyWcUuMtYGDXNc?p=preview

//myCore.js

var coreControl = angular.module('myCore', []);

function mainController($scope, $http) {
    $scope.formData = {};

    $http.get('*')
        .success(function(data) {
            $scope.things = data;
            console.log(data);
        })
        .error(function(data) {
            console.log('Error: ' + data);
        });

    $scope.doThings = function() {
        $http.post('*', $scope.formData)
            .success(function(data) {
                $scope.formData = {};
                $scope.things   = data;
                console.log(data);
            })
            .error(function(data) {
                console.log('Error: ' + data);
            });
    };
}
//index.html  
<div ng-if="moves.length==1" class="col-sm-4 col-sm-offset-4">
        <h1> {{ things[0].name }} </h1>
        <iframe width="560" height="315" ng-src="{{ things[0].embed }}" frameborder="0" allowfullscreen></iframe>

        {{ things[0].embed }}
</div>

【问题讨论】:

标签: javascript html angularjs iframe


【解决方案1】:

我知道我(再次)迟到了,但你去吧:

Strict Conceptual Escaping (SCE) 是 Angular 中的一个重要概念,不应掉以轻心(如果您关心应用程序的安全性)。

重要的是要了解它的含义以及致电$sce.trustAs...() 的含义和危险。

This answer 简要介绍了 SCE 是什么以及 Angular 为何以这种方式处理资源(例如 URL)。
That answer解释了客户端清理的重要性(这是你通过调用 $sce.trustAs...() 绕过的,除非你 100% 确定你可以信任它)。


也就是说,可能有更好的(阅读“更安全和更易于维护”)方法来实现相同的结果。

例如$sceDelegateProvider$sce 服务使用它来决定什么是安全的,什么不是)为 white-list/@987654326 提供方法@ 使用字符串匹配(带有可选通配符)或正则表达式(不推荐)的资源。
有关如何填充白名单/黑名单的更多信息,请查看 here


例如如果您希望您的应用程序允许来自www.youtube.com 的链接,您可以像这样定义您的白名单:

.config(function ($sceDelegateProvider) {
    $sceDelegateProvider.resourceUrlWhitelist([
        'self',   // trust all resources from the same origin
        '*://www.youtube.com/**'   // trust all resources from `www.youtube.com`
    ]);
});

另请参阅此updated demo

【讨论】:

    【解决方案2】:

    Your updated plunker

    您必须明确指示 Angular 信任可能会为 xss 攻击提供安全漏洞的内容。这就是

    $sce.trustResourceAsUrl()

    函数调用是为了。

    【讨论】:

    • 一点更正:ngSrc 仅适用于 &lt;img&gt; 元素。它适用于具有src 属性的任何 元素。
    • 目前我的 control.js 如下所示:plnkr.co/edit/gLNzn1MxFRtGGzCIG7Ge?p=catalogue 是否将我的函数用作回调有关系吗?当我尝试将我的函数作为第二个参数时,它不起作用。
    • 我不知道你在说什么回调。你是在谈论承诺吗?
    • 我不熟悉什么是承诺。我指的是您的 plunker 示例中控制器参数中的函数(“ctrl”,function....)。你能看看我在你评论上方发布的 plunker 代码吗?我不确定为什么我的 $sce.trustAsResourceUrl 代码在这里不起作用。
    • 没关系。我对这个网络开发的东西和 AngularJS 真的很陌生。我刚开始工作。我正在玩弄我的代码,并添加了另一个控制器函数来为我的嵌入式链接执行 $sce,然后将该函数设置为我想要的 div 的 ng-controller。感谢所有的帮助! :D
    猜你喜欢
    • 2020-04-04
    • 1970-01-01
    • 2018-10-29
    • 1970-01-01
    • 2012-11-27
    • 2021-03-05
    • 2012-12-15
    • 2012-02-22
    • 1970-01-01
    相关资源
    最近更新 更多