アプリのリストでAngularを使用しようとしていますが、それぞれがアプリを詳細に表示するリンクです(apps/app.id
):
<a id="{{app.id}}" href="apps/{{app.id}}" >{{app.name}}</a>
これらのリンクのいずれかをクリックするたびに、ChromeはURLを次のように表示します
unsafe:chrome-extension://kpbipnfncdpgejhmdneaagc.../apps/app.id
unsafe:
はどこから来たのですか?
正規表現を使用して、AngularのホワイトリストにURLプロトコルを明示的に追加する必要があります。 http
、https
、ftp
、およびmailto
のみがデフォルトで有効になっています。 Angularは、unsafe:
などのプロトコルを使用するときに、ホワイトリストに登録されていないURLの前にchrome-extension:
を付加します。
chrome-extension:
プロトコルをホワイトリストに登録するのに適した場所は、モジュールの構成ブロックです。
var app = angular.module( 'myApp', [] )
.config( [
'$compileProvider',
function( $compileProvider )
{
$compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|ftp|mailto|chrome-extension):/);
// Angular before v1.2 uses $compileProvider.urlSanitizationWhitelist(...)
}
]);
file:
やtel:
などのプロトコルを使用する必要がある場合にも、同じ手順が適用されます。
詳細については、AngularJS $ compileProvider APIドキュメント を参照してください。
誰かが画像でこの問題を抱えている場合にも:
app.config(['$compileProvider', function ($compileProvider) {
$compileProvider.imgSrcSanitizationWhitelist(/^\s*(https?|local|data|chrome-extension):/);
}]);
メールだけが必要な場合、telとsmsはこれを使用します。
app.config(['$compileProvider', function ($compileProvider) {
$compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|ftp|mailto|file|sms|tel):/);
}]);
<a href="{{applicant.resume}}" download> download resume</a>
var app = angular.module("myApp", []);
app.config(['$compileProvider', function($compileProvider) {
$compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|local|data|chrome-extension):/);
$compileProvider.imgSrcSanitizationWhitelist(/^\s*(https?|local|data|chrome-extension):/);
}]);
Angular 2+
には、DomSanitizer
のbypassSecurityTrustResourceUrl
メソッドを使用できます。
import {DomSanitizer} from '@angular/platform-browser';
class ExampleComponent {
sanitizedURL : SafeResourceUrl;
constructor(
private sanitizer: DomSanitizer){
this.sanitizedURL = this.sanitizer.bypassSecurityTrustResourceUrl();
}
}
Google Chromeは、Content Security Policy (CSP)
と連携するために拡張機能を必要とします。
CSP
の要件を満たすように拡張機能を変更する必要があります。
https://developer.chrome.com/extensions/contentSecurityPolicy.html
https://developer.mozilla.org/en-US/docs/Security/CSP
また、angularJSにはngCsp
ディレクティブがあり、使用する必要があります。