Próbuję używać Angulara z listą aplikacji, a każda z nich jest linkiem, aby zobaczyć aplikację bardziej szczegółowo ( apps/app.id
):
<a id="{{app.id}}" href="apps/{{app.id}}" >{{app.name}}</a>
Za każdym razem, gdy klikam jeden z tych łączy, Chrome wyświetla adres URL jako
unsafe:chrome-extension://kpbipnfncdpgejhmdneaagc.../apps/app.id
Skąd unsafe:
pochodzi?
ng-href
w tym przypadku użyć zamiasthref
: docs.quarejs.org/api/ng/directive/ngHreffunction gotoURL(url) { $window.location.href = url; }
Odpowiedzi:
Musisz jawnie dodać protokoły URL do białej listy Angulara, używając wyrażenia regularnego. Tylko
http
,https
,ftp
imailto
są włączone domyślnie. Angular poprzedzi adres URL, który nie znajduje się na białej liście,unsafe:
przy użyciu protokołu takiego jakchrome-extension:
.Dobrym miejscem do umieszczenia
chrome-extension:
protokołu na białej liście jest blok konfiguracji modułu:Ta sama procedura dotyczy również protokołów, takich jak
file:
itel:
.Więcej informacji można znaleźć w dokumentacji interfejsu API AngularJS $ compileProvider .
źródło
$compileProvider.aHrefSanitizationWhitelist
/^\s*(https?|ftp|file):|data:image\//
, aby uzyskać dostęp do lokalnego systemu plików dla aplikacji w pakiecie chrome|filesystem:chrome-extension:
należy dodać na końcu wyrażenia regularnego.|blob:chrome-extension:
na końcu.$compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|file|blob|ftp|mailto|chrome-extension):/);
W przypadku, gdy ktoś ma ten problem również z obrazami:
źródło
Jeśli potrzebujesz tylko poczty, tel i sms, użyj tego:
źródło
Google Chrome wymaga współpracy z rozszerzeniami
Content Security Policy (CSP)
.Musisz zmodyfikować swoje rozszerzenie, aby spełniało wymagania
CSP
.https://developer.chrome.com/extensions/contentSecurityPolicy.html
https://developer.mozilla.org/en-US/docs/Security/CSP
Ponadto angularJS ma
ngCsp
dyrektywę, której musisz użyć.http://docs.angularjs.org/api/ng.directive:ngCsp
źródło
"content_security_policy": "script-src 'self' https://ssl.google-analytics.com; object-src 'self'",
Czy muszę zmienić csp w manifeście?źródło
Dla
Angular 2+
można użyćDomSanitizer
„sbypassSecurityTrustResourceUrl
metody.źródło