关于angularJS的链接前自动加了unsafe的原因及解决方案
之前在做公司项目时,发现分享后的链接前缀被加上了unsafe
一开始还以为是客户端的锅,毕竟分享的功能是通过客户端的控件实现的。后来发现这是a链接实现的跳转,与人家客户端一毛钱的关系都没有。
这是angularJS对 href
有检查的,只能生成它认为安全的链接。这也表明了{{}}
并非简单的模板替换,而是将整个html重新编译了一次。
解决方案
angular.module('app').config( [
'$compileProvider',
function( $compileProvider )
{
$compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|ftp|mailto|tel|file|sms):/);
// Angular v1.2 之前使用 $compileProvider.urlSanitizationWhitelist(...)
}
]);
或 (含a标签)
.config(function($compileProvider){
//注:有些版本的angularjs为$compileProvider.urlSanitizationWhitelist(/^\s*(https?|ftp|mailto|file|javascript):/);,两种都试一下可以即可
$compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|itms\-apps|ftp|mailto|file|javascript):/);
})