En utilisant Angular et Phonegap, j'essaie de charger une vidéo qui se trouve sur un serveur distant mais qui a rencontré un problème. Dans mon JSON, l'URL est entrée comme URL HTTP ordinaire.
"src" : "http://www.somesite.com/myvideo.mp4"
Mon modèle vidéo
<video controls poster="img/poster.png">
<source ng-src="{{object.src}}" type="video/mp4"/>
</video>
Toutes mes autres données sont chargées mais quand je regarde ma console, j'obtiens cette erreur:
Error: [$interpolate:interr] Can't interpolate: {{object.src}}
Error: [$sce:insecurl] Blocked loading resource from url not allowed by $sceDelegate policy. URL
J'ai essayé d'ajouter $compileProvider
ma configuration, mais cela n'a pas résolu mon problème.
$compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|ftp|mailto|file|tel):/);
J'ai vu cet article sur les problèmes interdomaines, mais je ne sais pas comment résoudre ce problème ni dans quelle direction je dois aller. Des idées? Toute aide est appréciée
javascript
angularjs
cordova
mhartington
la source
la source
config.xml
fichier de votre corodva ?Réponses:
C'est la seule solution qui a fonctionné pour moi:
Puis dans un iframe:
http://plnkr.co/edit/tYq22VjwB10WmytQO9Pb?p=preview
la source
Une autre solution simple consiste à créer un filtre:
Spécifiez ensuite le filtre dans
ng-src
:la source
Mettre la ressource en liste blanche avec $ sceDelegateProvider
Cela est dû à une nouvelle politique de sécurité mise en place dans Angular 1.2. Il rend XSS plus difficile en empêchant un pirate de composer un numéro (c'est-à-dire en faisant une demande à une URL étrangère, contenant potentiellement une charge utile).
Pour le contourner correctement, vous devez mettre en liste blanche les domaines que vous souhaitez autoriser, comme ceci:
Cet exemple est extrait de la documentation que vous pouvez lire ici:
https://docs.angularjs.org/api/ng/provider/$sceDelegateProvider
Assurez-vous d'inclure ngSanitize dans votre application pour que cela fonctionne.
Désactiver la fonction
Si vous souhaitez désactiver cette fonctionnalité utile et que vous êtes sûr que vos données sont sécurisées, vous pouvez simplement autoriser **, comme ceci:
la source
resourceUrlWhitelist
cela ne fonctionne pas pour vous, vérifiez si vous n'avez pas de double barre oblique après le nom de domaine (facile pour cela lors de la concaténation de trucs à partir de variables et ils ont tous les deux des barres obliques)Eu le même problème ici. J'avais besoin de me lier aux liens Youtube. Ce qui a fonctionné pour moi, en tant que solution globale , a été d'ajouter ce qui suit à ma configuration:
L'ajout de «self» est important - sinon, il ne sera pas possible de se lier à une URL. Des documents angulaires
Avec cela en place, je suis maintenant capable de me lier directement à n'importe quel lien Youtube.
Vous devrez évidemment personnaliser l'expression régulière selon vos besoins. J'espère que ça aide!
la source
La solution la meilleure et la plus simple pour résoudre ce problème consiste à transmettre vos données à partir de cette fonction dans le contrôleur.
Dans la page html
la source
J'ai rencontré le même problème en utilisant Videogular. J'obtenais ce qui suit lors de l'utilisation de ng-src:
J'ai résolu le problème en écrivant une directive de base:
Le html:
la source
Si quelqu'un cherche une solution TypeScript:
Fichier .ts (modifiez les variables le cas échéant):
Html:
la source
Sur la base du message d'erreur, votre problème semble être lié à l' interpolation (généralement votre expression
{{}}
), pas à un problème interdomaine.ng-src="{{object.src}}"
Suce fondamentalement .ng-src
a été conçu avec leimg
tag à l'esprit IMO. Cela pourrait ne pas convenir<source>
. Voir http://docs.angularjs.org/api/ng.directive:ngSrcSi vous déclarez
<source src="somesite.com/myvideo.mp4"; type="video/mp4"/>
, cela fonctionnera, non? (notez que je retireng-src
en faveur desrc
) Sinon il faut d'abord le corriger.Assurez-vous ensuite que
{{object.src}}
renvoie la valeur attendue (en dehors de<video>
):S'il renvoie la valeur attendue, l'instruction suivante devrait fonctionner:
la source
ng-src
rupture (ce n'est pas le cas). Cela a à voir avec la politique de sécurité d'AngularJS: docs.angularjs.org/api/ng/service/$sceJ'ai eu cette erreur dans les tests , la directive
templateUrl
n'était pas fiable, mais uniquement pour la spécification, j'ai donc ajouté le répertoire du modèle:Mon répertoire principal est
app
.la source