Используя Angular и Phonegap, я пытаюсь загрузить видео, которое находится на удаленном сервере, но столкнулось с проблемой. В моем JSON URL-адрес вводится как простой HTTP-URL.
"src" : "http://www.somesite.com/myvideo.mp4"
Мой видео шаблон
<video controls poster="img/poster.png">
<source ng-src="{{object.src}}" type="video/mp4"/>
</video>
Все мои другие данные загружаются, но когда я смотрю свою консоль, я получаю эту ошибку:
Error: [$interpolate:interr] Can't interpolate: {{object.src}}
Error: [$sce:insecurl] Blocked loading resource from url not allowed by $sceDelegate policy. URL
Я попытался добавить $compileProvider
настройки, но это не решило мою проблему.
$compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|ftp|mailto|file|tel):/);
Я видел этот пост о междоменных проблемах, но я не уверен, как решить эту проблему или в каком направлении мне идти. Есть идеи? Любая помощь приветствуется
javascript
angularjs
cordova
mhartington
источник
источник
config.xml
файл вашего corodva ?Ответы:
Это единственное решение, которое сработало для меня:
Тогда в iframe:
http://plnkr.co/edit/tYq22VjwB10WmytQO9Pb?p=preview
источник
Еще одно простое решение - создать фильтр:
Затем укажите фильтр в
ng-src
:источник
Белый список ресурса с $ sceDelegateProvider
Это вызвано новой политикой безопасности, введенной в Angular 1.2. Это усложняет XSS, предотвращая дозвон хакера (т. Е. Отправляя запрос на внешний URL, потенциально содержащий полезную нагрузку).
Чтобы обойти это правильно, вам нужно добавить в белый список домены, которые вы хотите разрешить, например:
Этот пример взят из документации, которую вы можете прочитать здесь:
https://docs.angularjs.org/api/ng/provider/$sceDelegateProvider
Не забудьте включить ngSanitize в ваше приложение, чтобы сделать эту работу.
Отключение функции
Если вы хотите отключить эту полезную функцию и уверены, что ваши данные в безопасности, вы можете просто разрешить **, например, так:
источник
resourceUrlWhitelist
то не работает для вас, проверьте, не у вас ли двойная косая черта после доменного имени (это легко сделать при объединении вещей из переменных, и у них обеих есть косая черта)Была такая же проблема здесь. Мне нужно было привязать ссылки на Youtube. Что для меня, как глобального решения , помогло добавить следующее в мою конфигурацию:
Важно добавить «self», иначе не будет привязано ни к одному URL. Из угловых документов
Теперь я могу связываться с любой ссылкой на YouTube.
Вам, очевидно, придется настроить регулярное выражение в соответствии с вашими потребностями. Надеюсь, поможет!
источник
Лучшее и простое решение для решения этой проблемы - передать ваши данные из этой функции в контроллер.
На html странице
источник
Я столкнулся с той же проблемой, используя Videogular. Я получаю следующее при использовании ng-src:
Я исправил проблему, написав основную директиву:
HTML:
источник
Если кто-то ищет решение TypeScript:
Файл .ts (при необходимости измените переменные):
Html:
источник
Судя по сообщению об ошибке, ваша проблема связана с интерполяцией (обычно с выражением
{{}}
), а не с междоменной проблемой. В основномng-src="{{object.src}}"
отстой.ng-src
был разработан сimg
пометкой IMO. Это может не подходить для<source>
. См. Http://docs.angularjs.org/api/ng.directive:ngSrc.Если вы заявите
<source src="somesite.com/myvideo.mp4"; type="video/mp4"/>
, это будет работать, верно? (обратите внимание, что я убираюng-src
в пользуsrc
). Если нет, то это должно быть исправлено первым.Затем убедитесь , что
{{object.src}}
возвращает ожидаемое значение ( за пределами от<video>
):Если он возвращает ожидаемое значение, должен работать следующий оператор:
источник
ng-src
быть сломанным (это не сломано). Это связано с политикой безопасности AngularJS: docs.angularjs.org/api/ng/service/$sceУ меня была эта ошибка в тестах , директива
templateUrl
не была доверенной, но только для спецификации, поэтому я добавил каталог шаблонов:Мой главный каталог
app
.источник