【发布时间】:2023-03-09 21:40:01
【问题描述】:
我正在使用此指令将 jCrop 与 Angular 一起使用:http://plnkr.co/edit/Z2IQX8s9UK6wQ1hS4asz?p=preview
当我加载 src 的值时,我收到此错误:
无法插值:{{profileImg}} 错误:[$sce:insecurl]
然后它将我链接到这样的页面:
$sceDelegate 策略不允许从 url 加载资源。
我的 html 是这样的:
<img-cropped src={{profileImg}} selected='selected(cords)'/>
当我将$scope.profileImg 更改为我的图片的网址时会发生此错误。
我正在链接到 S3,我从 profileImg 获取值。我信任这个来源,那么我如何告诉 Angular 这个来源足够受信任以使该指令正常工作?
如果我将src 硬编码为我的图像,我不会遇到这个问题。
编辑:
我正在尝试使用 $sce 信任该 url。
我的控制器:
cmsApp.controller('PresentationCtrl',function($scope, $upload, all, $sce){
var socket = io.connect('https://xxxxxx.xxxxxxxxxxxxxx.xxx:3000');
$scope.profileImg="";
$scope.uploadProfilePic = function(){
socket.removeAllListeners();
console.log(file3);
var url = 'https://xxxxxxx.xxxxxxxxxx.xxx:3000/uploadProfile?tenant=xxxxx';
$scope.upload = $upload.upload({
url:url,
data:{myObj:'test1'},
file:file3
}).progress(function(evt){
console.log('percent: ' + parseInt(100.0 * evt.loaded / evt.total));
}).success(function(data,status,headers,config){
$sce.trustAsUrl(data);
$scope.profileImg = data;
});
};
});
即使使用trustAsUrl,它也会引发相同的错误。
可能是我试图从我的本地 nginx 服务器连接它?
编辑2:
我将其移至 S3 托管,并且成功了。我试图链接到的图像也在 S3 上。 我将它移到 EC2 实例上的 Apache Web 服务器上,但它不起作用。
我正在使用所有答案,ng-src 而不是 src、$sce.trustAsUrl(url) 和 $compileProvider
【问题讨论】:
-
你试过用 ng-src 代替 img 上的 src 吗?它应该有助于防止类似的问题。硬编码可以工作的事实告诉我,您可能应该改用 ng-src。
-
@aaronfrost 我刚刚尝试过,但没有成功。我得到了同样的错误
-
在您设置 url 的控制器中,您需要注入 $sce 服务并使用它。不知道你在做什么出了什么问题。
-
@aaronfrost 我发布了我的控制器代码,看起来我注入了
$sce
标签: javascript angularjs angularjs-directive jcrop