جاوااسکریپت - AngularJS آدرسهای اینترنتی را در صفحه افزونه به «غیرامن» تغییر میدهد


من در حال تلاش برای استفاده از انگولار با یک لیست از برنامهها هستم، و هرکدام یک لینک برای دیدن جزئیات بیشتر یک برنامه هستند (apps/app.id):

<a id="{{app.id}}" href="apps/{{app.id}}" >{{app.name}}</a>

هر بار که روی یکی از این لینکها کلیک میکنم، کروم URL را به صورت نشان میدهد

unsafe:chrome-extension://kpbipnfncdpgejhmdneaagc.../apps/app.id

عبارت unsafe: از کجا آمده است؟

پاسخ شماره ۱

شما نیاز دارید به طور صریح پروتکلهای URL را با استفاده از یک عبارت منظم به لیست سفید Angular اضافه کنید. تنها http، https، ftp و mailto به طور پیشفرض فعال هستند. Angular هنگام استفاده از پروتکلی مانند chrome-extension:، یک URL که در لیست سفید نیست را با unsafe: پیشفرض میکند.

یک مکان مناسب برای سفید کردن پروتکل 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: دارید نیز صادق است.

لطفاً برای اطلاعات بیشتر به مستندات API $compileProvider در AngularJS مراجعه کنید.

پاسخ شماره ۲

در صورتی که کسی این مشکل را با تصاویر هم داشته باشد:

app.config(['$compileProvider', function ($compileProvider) {
    $compileProvider.imgSrcSanitizationWhitelist(/^\s*(https?|local|data|chrome-extension):/);
}]);