AngularJS错误:阻止从$ sceDelegate策略允许的URL加载资源

时间:2017-01-13 20:05:33

标签: javascript angularjs angularjs-1.6

我目前正在关注AngularJS的教程。这是我的controllers.js文件中的代码。

'use strict';

angular.module ( 'F1FeederApp.controllers' , []                                     )
.controller    ( 'driversController'       , function ( $scope , ergastAPIservice ) {

    $scope.nameFilter = null;
    $scope.driversList = [];

    ergastAPIservice.getDrivers ().success ( function ( response ) {
        $scope.driversList = response.MRData.StandingsTable.StandingsLists [ 0 ].DriverStandings;
    });
});

我收到以下错误:

1)$ sceDelegate policy不允许阻止从url加载资源。

2)TypeError:ergastAPIservice.getDrivers(...)。success不是函数

我根本不确定导致这些错误的原因,我对Angular很新。在我和其他示例之间我看到的唯一可能的差异是在这段代码中:(services.js)

'use strict';

angular.module ( 'F1FeederApp.services' , []                 )
.factory       ( 'ergastAPIservice'     , function ( $http ) {

    var ergastAPI = {};

    ergastAPI.getDrivers = function () {
        return $http ({
            method : 'JSONP' ,
            url    : 'http://ergast.com/api/f1/2013/driverStandings.json?callback=JSON_CALLBACK'
        });
    };

    return ergastAPI;
});

我注意到的差异在于我的getDrivers函数末尾有一个分号,并且我在文件顶部也有use strict语句。但是,grunt拒绝在没有这两行的情况下运行应用程序,所以我不认为这可能是问题。

如果有人能指出我正确的方向,我会非常感激。

2 个答案:

答案 0 :(得分:15)

问题#1

您尝试从应用中请求的网址不安全     根据AngularJS sceDelegatePolicy。要解决它,你需要     使用resourceUrlWhitelist方法将应用中的网址列入白名单     在 $sceDelegateProvider 中,如下所示:

angular.module('myApp', []).config(function($sceDelegateProvider) {  
$sceDelegateProvider.resourceUrlWhitelist([
    // Allow same origin resource loads.
    'self',
    // Allow loading from our assets domain. **.
    'http://ergast.com/**'
  ]);

有一个明确的解释,上面的例子来自 here

问题#2:

错误TypeError: ergastAPIservice.getDrivers(...).success is not a function的问题可能是由于您使用的AngularJS版本。旧版 .success/.error方法现已在最新的AngularJs版本1.6 中弃用。这是 Deprecation notice 如果您使用的是最新的AngularJ,可能是原因,否则,我们需要更多信息来调试问题。

答案 1 :(得分:1)

您可以使用以下

$scope.trustSrc = function(src) {
    return $sce.trustAsResourceUrl(src);
}

and your html should have {{trustSrc(myUrl)}} instead of {{myUrl}}
相关问题