我需要将一些网址列为{{vars}}
的一些网址列入某些iframe src
域名是:
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,包括使用通常的$ sce错误调用域#1 [$sce:insecurl] Blocked loading resource from url not allowed by $sceDelegate policy
。
如果我尝试在#1之前放置#2声明,则域#1 URL将列入白名单,但不会列入#2。
我怀疑罪魁祸首是Regexp,但它们对我来说似乎很好,但显然不足以获得$ sce。
答案 0 :(得分:3)
你可以"合并"使用可选组将两个语句合并为一个语句:
$sceDelegateProvider.resourceUrlWhitelist(['self', new RegExp('^(https?):\\/\\/(w{3}\\.)?chateauversailles(-spectacles)?\\.fr/.+$')]);
请注意,在使用RegExp构造函数时需要使用双重转义。
REGEX EXPLANATION :
^
- 字符串锚的开始(https?)
- 与http
或https
匹配的捕获组(请注意,如果您不使用反向引用,则可以删除圆括号):\\/\\/
- 按字面意思匹配://
(请注意,您不必在构造函数中转义斜杠,因为它不允许使用分隔符,因此您可以编写://
)(w{3}\\.)?
- 一个可选的捕获组(因为?
量词)与字母w
匹配,恰好有3次出现并且有一个文字点chateauversailles
- 匹配指定的字母序列1次(-spectacles)?
- 与-spectacles
匹配的可选组或?
量词的任何内容。\\.fr/
- 按字面意思匹配.fr/
.+
- 匹配换行符以外的任何1个或多个字符$
- 字符串结束。