189

アプリのリストで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:から来たの?

4

6 に答える 6

363

正規表現を使用して、URLプロトコルをAngularのホワイトリストに明示的に追加する必要があります。デフォルトではhttp、、、およびのみが有効になっています。Angularは、などのプロトコルを使用する場合、ホワイトリストに登録されていないURLの前にプレフィックスを付けます。httpsftpmailtounsafe: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 $compileProviderAPIのドキュメントを参照してください。

于 2013-04-02T16:51:10.307 に答える
57

誰かが画像でこの問題を抱えている場合も同様です:

app.config(['$compileProvider', function ($compileProvider) {
    $compileProvider.imgSrcSanitizationWhitelist(/^\s*(https?|local|data|chrome-extension):/);
}]);
于 2015-03-02T23:22:42.947 に答える
6

メールだけが必要な場合は、telとsmsはこれを使用します。

app.config(['$compileProvider', function ($compileProvider) {
    $compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|ftp|mailto|file|sms|tel):/);
}]);
于 2017-02-16T12:28:18.057 に答える
2

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、使用する必要のあるディレクティブがあります。

http://docs.angularjs.org/api/ng.directive:ngCsp

于 2013-03-26T00:21:07.340 に答える
2
<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):/);

        }]);
于 2018-07-06T07:32:08.210 に答える
2

Angular 2+あなたはの方法を使うことができDomSanitizerますbypassSecurityTrustResourceUrl

import {DomSanitizer} from '@angular/platform-browser';

class ExampleComponent {
    sanitizedURL : SafeResourceUrl;

    constructor(
        private sanitizer: DomSanitizer){
        this.sanitizedURL = this.sanitizer.bypassSecurityTrustResourceUrl(); 
    }
}
于 2018-08-02T07:42:19.730 に答える