AngularJS $ sceDelegate RegExp:麻烦将类似域列入白名单?

时间:2015-06-19 16:00:08

标签: javascript regex angularjs iframe

我需要将一些网址列为{{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。

1 个答案:

答案 0 :(得分:3)

你可以"合并"使用可选组将两个语句合并为一个语句:

$sceDelegateProvider.resourceUrlWhitelist(['self', new RegExp('^(https?):\\/\\/(w{3}\\.)?chateauversailles(-spectacles)?\\.fr/.+$')]);

请注意,在使用RegExp构造函数时需要使用双重转义。

REGEX EXPLANATION

  • ^ - 字符串锚的开始
  • (https?) - 与httphttps匹配的捕获组(请注意,如果您不使用反向引用,则可以删除圆括号)
  • :\\/\\/ - 按字面意思匹配://(请注意,您不必在构造函数中转义斜杠,因为它不允许使用分隔符,因此您可以编写://
  • (w{3}\\.)? - 一个可选的捕获组(因为?量词)与字母w匹配,恰好有3次出现并且有一个文字点
  • chateauversailles - 匹配指定的字母序列1次
  • (-spectacles)? - 与-spectacles匹配的可选组或?量词的任何内容。
  • \\.fr/ - 按字面意思匹配.fr/
  • .+ - 匹配换行符以外的任何1个或多个字符
  • $ - 字符串结束。