#angularjs
#angularjs
Вопрос:
Я пытаюсь отображать видео на Youtube вместе с контентом. Содержимое отображается, однако встроенное видео Youtube — нет. Я читал, что мне нужно добавить youtube в белый список для копирования, но я думаю, что моя настройка нуждается в корректировке. Мой контент проходит через ng-повтор, подобный такому:
ng-bind-html=activity.content
Here is a song to listen to:
<iframe width="560" height="315" ng-src="https://www.youtube.com/embed/dcdgV0eYLSQ" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
шаблон выглядит так
<div class="activity" ng-bind-html="activity.content"></div>
Я попытался установить URL-адрес белого списка в $ sceDelegateProvider, но, кажется, я пропустил один шаг. Как мне убедиться, что youtube принят? В настоящее время это не так.
app.config(function($sceDelegateProvider) {
$sceDelegateProvider.resourceUrlWhitelist([
'self',
'*://www.youtube.com/**'
]);
});
Комментарии:
1. Что именно вы имеете в виду, говоря «содержимое отображается, а встроенное видео Youtube — нет»? Вы получаете какие-либо ошибки в консоли?
2. Тег шаблона содержит как встроенное видео Youtube, так и строку текста. Строка текста отображается, а видео на Youtube — нет.
Ответ №1:
Вы можете использовать фильтр, который возвращает функцию, чтобы доверять этому ресурсу.
.filter('trustAsResourceUrl', ['$sce', function($sce) {
return function(val) {
return $sce.trustAsResourceUrl(val);
};
}]);
А затем примените его к вашей привязке следующим образом
<div class="activity">
<iframe ng-src="{{embed | trustAsResourceUrl}}" width="560" height="315" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
</div>