我试图用角与应用程序的列表,而且每一个都是看到更详细的(一个应用程序的链接apps/app.id
):
<a id="{{app.id}}" href="apps/{{app.id}}" >{{app.name}}</a>
每次我点击其中一个链接,Chrome会显示URL作为
unsafe:chrome-extension://kpbipnfncdpgejhmdneaagc.../apps/app.id
在什么地方unsafe:
来自哪里?
我试图用角与应用程序的列表,而且每一个都是看到更详细的(一个应用程序的链接apps/app.id
):
<a id="{{app.id}}" href="apps/{{app.id}}" >{{app.name}}</a>
每次我点击其中一个链接,Chrome会显示URL作为
unsafe:chrome-extension://kpbipnfncdpgejhmdneaagc.../apps/app.id
在什么地方unsafe:
来自哪里?
你需要使用正则表达式明确添加URL协议角的白名单。 只有http
, https
, ftp
和mailto
默认情况下启用。 角将前缀与非列入白名单的URL unsafe:
使用协议例如当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):/);
}]);
如果你只需要对邮件,电话和短信使用:
app.config(['$compileProvider', function ($compileProvider) {
$compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|ftp|mailto|file|sms|tel):/);
}]);
谷歌浏览器要求它的扩展与合作的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
<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();
}
}