Tôi đang làm việc trên trang web hướng CMS bằng Angular (1.2 RC2) ở phía máy khách. Vì nội dung xuất phát từ CMS, tôi không may bị buộc phải sử dụng nhận HTML trong JSON Strings. Hầu hết các HTML được tiêm và kết xuất tốt, nhưng các thẻ hình ảnh có src của họ bị tước đi. Từ những gì tôi đã đọc src nên đã được tiền tố với "không an toàn:", không loại bỏ hoàn toàn nếu đây là một vấn đề bảo mật XSS trong Angular .. nhưng tôi có thể bị nhầm lẫn.Góc 1,2: ng-bind-html loại bỏ thuộc tính src trên img
Tôi đã gặp vấn đề này một thời gian và cảm thấy tôi đã thử mọi thứ từ đáng tin cậy đến hết sức ngu ngốc. Đưa vào danh sách trắng url CMS của tôi, liệt kê tất cả mọi thứ, tắt $ sce, buộc máng html $ sce.trustAsHtml() và tốt ... Cho đến nay, không có may mắn. Khi trang web là CMS hướng tôi không may không thể tạo ra một plunker/fiddle, nhưng tôi hy vọng một linh hồn tử tế sẽ cố gắng giúp đỡ anyway.
Cập nhật: Quên đề cập đến rằng tôi cũng đã thử ng-src, cùng một hiệu ứng. Cập nhật II: Nếu tôi sử dụng HTTPS, thuộc tính src vẫn còn và hình ảnh được hiển thị. Điều này được chấp nhận vì nó sẽ chạy trên HTTPS trong sản xuất, nhưng tôi vẫn muốn biết tại sao việc vô hiệu hóa $ sce không hoạt động.
HTML như được thấy bởi trình duyệt (nội dung của slide.body)
<div class="row">
<div class="col-md-6 visible-md visible-lg">
<img alt="none" class="img-responsive">
</div>
<div class="col-xs-12 col-md-6">
<div class="itx-article-header">
<h1>Sulvat Quis 1</h1>
<h2>– Nullam dictum ac enim</h2>
</div>
<p>Proin quis justo vel felis varius sodales sit amet ut diam.</p>
</div>
</div>
JADE (HTML)
.my-carousel(ng-controller='CarouselCtrl')
carousel(interval='myInterval')
slide(ng-repeat='slide in slides', active='slide.active')
.my-carousel-item(ng-bind-html='slide.body')
điều khiển góc
.controller('CarouselCtrl', ['$sce', 'Article', '$scope',
function($sce, Article, $scope) {
$scope.myInterval = -1;
$scope.slides = Article.query(
{category: 'carousel'},
function(data){
for (var i = 0; i < data.length; i++) {
$scope.slides[i].body = $sce.trustAsHtml(data[i].body);
}
},
function() {
// Fail
});
}])
Phản hồi JSON mẫu (Slide) Xin lỗi về hộp rộng, không quản lý định dạng được.
{
"cmarId": 16,
"corp": {
"corpId": 2,
"guiSelected": false
},
"createdAt": "Sep 27, 2013",
"articleTag": "slide-1",
"headline": "Slide 1",
"highlighted": false,
"body": "\u003cdiv class\u003d\"container my-carousel-container-small\"\u003e\r\n\u003cdiv class\u003d\"row\"\u003e\r\n\u003cdiv class\u003d\"col-md-6 visible-md visible-lg\"\u003e\u003cimg ng-src\u003d\"img/illustrative/laptop.jpg\" alt\u003d\"none\" class\u003d\"img-responsive\" /\u003e\u003c/div\u003e\r\n\u003cdiv class\u003d\"col-xs-12 col-md-6\"\u003e\r\n\u003cdiv class\u003d\"my-article-header\"\u003e\r\n\u003ch1\u003eSulvat Quis 1\u003c/h1\u003e\r\n\u003ch2\u003e– Nullam dictum ac enim\u003c/h2\u003e\r\n\u003c/div\u003e\r\n\u003cp\u003eProin quis justo vel felis varius sodales sit amet ut diam. Fusce auctor sapien nec purus sagittis, in venenatis turpis luctus. Nullam dictum ac enim sed commodo. Vivamus et placerat sapien.\u003c/p\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e",
"articlePriority": 0,
"category": {
"cmcaId": 9,
"corp": {
"corpId": 2,
"guiSelected": false
},
"name": "carousel",
"visibleInMenu": false
},
"published": true
}
Bạn đã thử 'ng-src'? – kubuntu
Yupp, vẫn còn thiếu. –
Bạn có thể cho chúng tôi biết bạn đã làm gì với '$ sce.trustAsHtml()'? –