Estoy tratando de usar Angular con una lista de aplicaciones, y cada una es un enlace para ver una aplicación con más detalle ( apps/app.id
):
<a id="{{app.id}}" href="apps/{{app.id}}" >{{app.name}}</a>
Cada vez que hago clic en uno de estos enlaces, Chrome muestra la URL como
unsafe:chrome-extension://kpbipnfncdpgejhmdneaagc.../apps/app.id
¿De dónde unsafe:
viene el?
ng-href
en este caso en lugar de solohref
: docs.angularjs.org/api/ng/directive/ngHreffunction gotoURL(url) { $window.location.href = url; }
Respuestas:
Debe agregar explícitamente protocolos de URL a la lista blanca de Angular utilizando una expresión regular. Sólo
http
,https
,ftp
ymailto
están habilitados de forma predeterminada. Angular agregará un prefijo a una URL que no esté en la lista blancaunsafe:
cuando use un protocolo comochrome-extension:
.Un buen lugar para
chrome-extension:
incluir en la lista blanca el protocolo sería en el bloque de configuración de su módulo:El mismo procedimiento también se aplica cuando necesita usar protocolos como
file:
ytel:
.Consulte la documentación de la API AngularJS $ compileProvider para obtener más información.
fuente
$compileProvider.aHrefSanitizationWhitelist
/^\s*(https?|ftp|file):|data:image\//
, para acceder al sistema de archivos local para una aplicación empaquetada de Chrome,|filesystem:chrome-extension:
debe agregarse al final de la expresión regular.|blob:chrome-extension:
al final.$compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|file|blob|ftp|mailto|chrome-extension):/);
En caso de que alguien tenga este problema con las imágenes, también:
fuente
Si solo necesita correo, tel y sms use esto:
fuente
Google Chrome requiere sus extensiones para cooperar
Content Security Policy (CSP)
.Debe modificar su extensión para cumplir con los requisitos de
CSP
.https://developer.chrome.com/extensions/contentSecurityPolicy.html
https://developer.mozilla.org/en-US/docs/Security/CSP
Además, angularJS tiene una
ngCsp
directiva que debe usar.http://docs.angularjs.org/api/ng.directive:ngCsp
fuente
"content_security_policy": "script-src 'self' https://ssl.google-analytics.com; object-src 'self'",
¿Necesito cambiar la csp en el manifiesto?fuente
Para
Angular 2+
que pueda utilizarDomSanitizer
elbypassSecurityTrustResourceUrl
método.fuente