Javascript AngularJS$SCELegate RegExp:将类似域列入白名单时遇到问题?
我需要将一些url作为Javascript AngularJS$SCELegate RegExp:将类似域列入白名单时遇到问题?,javascript,regex,angularjs,iframe,Javascript,Regex,Angularjs,Iframe,我需要将一些url作为{{{vars}}传递给一些iframesrc,并将其列为白名单 域名包括: 1 : http://chateauversailles.fr 2 : http://www.chateauversailles-spectacles.fr/ 这适用于所有#1 URL: 只要我在域2上尝试sames规则: 它会中断所有iFrame src,包括带有常见$sce错误的域#1调用:[$sce:insteUrl]阻止从url加载资源$SCEDegate策略不允许的资源 如果我尝
{{{vars}}
传递给一些iframesrc
,并将其列为白名单
域名包括:
1 : http://chateauversailles.fr
2 : http://www.chateauversailles-spectacles.fr/
这适用于所有#1 URL:
只要我在域2上尝试sames规则: 它会中断所有iFrame src,包括带有常见$sce错误的域#1调用:
[$sce:insteUrl]阻止从url加载资源$SCEDegate策略不允许的资源
如果我尝试将语句#2放在#1之前,则域#1 URL将被列入白名单,而不是#2 我怀疑罪魁祸首是Regexp,但它们对我来说似乎很好,但显然不够$sce。您可以使用可选组将两个语句“合并”为一个语句:
$sceDelegateProvider.resourceUrlWhitelist(['self', new RegExp('^(https?):\\/\\/(w{3}\\.)?chateauversailles(-spectacles)?\\.fr/.+$')]);
请注意,在使用RegExp构造函数时需要使用双转义
正则表达式解释:
-字符串锚的开始^
)-与(https?
或http
匹配的捕获组(注意,如果不使用反向引用,可以删除圆括号)https
-逐字匹配:\\/\\/
(注意,您不必在构造函数中转义斜杠,因为它不允许使用分隔符,因此您可以编写:/
):/
-一个可选的捕获组(因为(w{3}\\)?
量词),它与字母?
匹配,正好有3次出现和一个文字点w
-与指定的字母顺序匹配1次凡尔赛城堡
-与(-bitches)?
匹配的可选组,或者由于-bitches
量词而不匹配?
-按字面意思匹配\\.fr/
.fr/
-匹配除换行符以外的任何一个或多个字符+
-字符串结束$
$sceDelegateProvider.resourceUrlWhitelist(['self',new RegExp('^(https?:\\/\\\\/\\\/(w{3}\\\\)?凡尔赛城堡(-cogits)?\\\.fr/+$))代码>作为一条语句。@Stribizev-就是这个。非常感谢。请把你的评论变成一个答案,这样我可以投票给你。很高兴它对你有用。这是一个非常好的详细答案。一个很好的正则表达式教程。
$sceDelegateProvider.resourceUrlWhitelist(['self', new RegExp('^(http[s]?):\/\/(w{3}.)?chateauversailles\.fr/.+$')]);
$sceDelegateProvider.resourceUrlWhitelist(['self', new RegExp('^(http[s]?):\/\/(w{3}.)?chateauversailles\-spectacles\.fr/.+$')]);
$sceDelegateProvider.resourceUrlWhitelist(['self', new RegExp('^(https?):\\/\\/(w{3}\\.)?chateauversailles(-spectacles)?\\.fr/.+$')]);