Usando Angular y Phonegap, estoy tratando de cargar un video que está en un servidor remoto pero encontré un problema. En mi JSON, la URL se ingresa como una URL HTTP simple.
"src" : "http://www.somesite.com/myvideo.mp4"
Mi plantilla de video
<video controls poster="img/poster.png">
<source ng-src="{{object.src}}" type="video/mp4"/>
</video>
Todos mis otros datos se cargan, pero cuando miro mi consola, aparece este error:
Error: [$interpolate:interr] Can't interpolate: {{object.src}}
Error: [$sce:insecurl] Blocked loading resource from url not allowed by $sceDelegate policy. URL
Intenté agregar $compileProvider
mi configuración de configuración pero no resolvió mi problema.
$compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|ftp|mailto|file|tel):/);
Vi esta publicación sobre problemas entre dominios, pero no estoy seguro de cómo resolver esto o en qué dirección debo ir. ¿Alguna idea? Cualquier ayuda es apreciada
javascript
angularjs
cordova
mhartington
fuente
fuente
config.xml
archivo de tu corodva ?Respuestas:
Esta es la única solución que funcionó para mí:
Luego en un iframe:
http://plnkr.co/edit/tYq22VjwB10WmytQO9Pb?p=preview
fuente
Otra solución simple es crear un filtro:
Luego especifique el filtro en
ng-src
:fuente
Incluya en la lista blanca el recurso con $ sceDelegateProvider
Esto se debe a una nueva política de seguridad implementada en Angular 1.2. Hace que XSS sea más difícil al evitar que un pirata informático marque (es decir, realizar una solicitud a una URL extranjera, que posiblemente contenga una carga útil).
Para evitarlo correctamente, debe incluir en la lista blanca los dominios que desea permitir, de esta manera:
Este ejemplo se extrae de la documentación que puede leer aquí:
https://docs.angularjs.org/api/ng/provider/$sceDelegateProvider
Asegúrese de incluir ngSanitize en su aplicación para que esto funcione.
Deshabilitar la función
Si desea desactivar esta útil función, y está seguro de que sus datos están seguros, simplemente puede permitir **, así:
fuente
resourceUrlWhitelist
alguna manera no funciona para usted, verifique si no tiene una barra doble después del nombre de dominio (es fácil que esto suceda al concatenar cosas de variables y ambas tienen barras)Tuve el mismo problema aquí. Necesitaba unirme a los enlaces de Youtube. Lo que funcionó para mí, como solución global , fue agregar lo siguiente a mi configuración:
Agregar 'self' allí es importante; de lo contrario, no se vinculará a ninguna URL. De los documentos angulares
Con eso en su lugar, ahora puedo vincular directamente a cualquier enlace de Youtube.
Obviamente, tendrá que personalizar la expresión regular según sus necesidades. ¡Espero eso ayude!
fuente
La mejor y más fácil solución para resolver este problema es pasar sus datos de esta función en el controlador.
En la página html
fuente
Me encontré con el mismo problema usando Videogular. Recibía lo siguiente cuando usaba ng-src:
Solucioné el problema escribiendo una directiva básica:
El html:
fuente
Si alguien está buscando una solución TypeScript:
archivo .ts (cambie las variables cuando corresponda):
HTML:
fuente
Según el mensaje de error, su problema parece estar relacionado con la interpolación (generalmente su expresión
{{}}
), no con un problema de dominio cruzado. Básicamenteng-src="{{object.src}}"
apesta.ng-src
fue diseñado con laimg
etiqueta en mente IMO. Puede que no sea apropiado para<source>
. Ver http://docs.angularjs.org/api/ng.directive:ngSrcSi declaras
<source src="somesite.com/myvideo.mp4"; type="video/mp4"/>
, funcionará, ¿verdad? (tenga en cuenta que eliminong-src
a favor desrc
) Si no, debe solucionarse primero.Luego, asegúrese de que
{{object.src}}
devuelve el valor esperado ( fuera de<video>
):Si devuelve el valor esperado, la siguiente instrucción debería funcionar:
fuente
ng-src
estar roto (no está roto). Tiene que ver con la política de seguridad de AngularJS: docs.angularjs.org/api/ng/service/$sceTuve este error en las pruebas , la directiva
templateUrl
no era confiable, pero solo para la especificación, así que agregué el directorio de plantilla:Mi directorio principal es
app
.fuente