AngularJS $ sceDelegate RegExp:将类似域名列入白名单?
问题描述:
我需要将一些url作为{{vars}}
传递给某些iframes src
's。
域名是:
1 : http://chateauversailles.fr
2 : http://www.chateauversailles-spectacles.fr/
这适用于所有的#1网址:
$sceDelegateProvider.resourceUrlWhitelist(['self', new RegExp('^(http[s]?):\/\/(w{3}.)?chateauversailles\.fr/.+$')]);
当我尝试萨姆斯域#2法则:
$sceDelegateProvider.resourceUrlWhitelist(['self', new RegExp('^(http[s]?):\/\/(w{3}.)?chateauversailles\.fr/.+$')]);
$sceDelegateProvider.resourceUrlWhitelist(['self', new RegExp('^(http[s]?):\/\/(w{3}.)?chateauversailles\-spectacles\.fr/.+$')]);
它打破了所有iframe src的,包括域名#1调用通常$ sce错误:[$sce:insecurl] Blocked loading resource from url not allowed by $sceDelegate policy
。
如果我尝试在#1之前放置语句#2,则域#1的URL被列入白名单,但不是#2。
我怀疑罪魁祸首是正则表达式,但他们对我来说看起来相当不错,但对于$ sce显然还不够。
答
可以“合并”两个语句为一个使用可选组:
$sceDelegateProvider.resourceUrlWhitelist(['self', new RegExp('^(https?):\\/\\/(w{3}\\.)?chateauversailles(-spectacles)?\\.fr/.+$')]);
请注意,你需要使用一个RegExp构造函数时使用双转义。
正则表达式的说明:
-
^
- 启动串锚 -
(https?)
- 捕获组匹配http
或https
(请注意,你可以,如果你不使用反向引用删除圆括号) -
:\\/\\/
- 从字面上匹配://
(注意,您不必在构造函数中跳过斜线,因为它不允许使用分隔符,因此您可以编写://
) -
(w{3}\\.)?
- (因为?
量词),该信w
,恰好3次出现和文字点 -
chateauversailles
匹配的可选捕获组 - 匹配指定字母序列1周时间 -
(-spectacles)?
- 可选组匹配-spectacles
或由于?
量词而没有任何结果。 -
\\.fr/
- 匹配.fr/
字面上 -
.+
- 匹配比换行符 -
$
其他任何1个或多个字符 - 字符串的结尾。
+0
多么好的,详细的答案。一个很好的正则表达式教程。 –
+0
欢迎您:) –
尝试'$ sceDelegateProvider.resourceUrlWhitelist(['self',new RegExp('^(https?):\\/\\ /(w {3} \\。)?chateauversailles(-spectacles)?\ \ .fr /.+$')]);'作为单个语句。 –
@stribizhev - 就是那个。谢谢。请将您的评论转换为答案,以便我可以让您满意。 –
已发布。很高兴它变成为你工作。 –