2015-06-19 65 views
2

我需要将一些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显然还不够。

+0

尝试'$ sceDelegateProvider.resourceUrlWhitelist(['self',new RegExp('^(https?):\\/\\ /(w {3} \\。)?chateauversailles(-spectacles)?\ \ .fr /.+$')]);'作为单个语句。 –

+0

@stribizhev - 就是那个。谢谢。请将您的评论转换为答案,以便我可以让您满意。 –

+0

已发布。很高兴它变成为你工作。 –

回答

3

可以“合并”两个语句为一个使用可选组:

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

请注意,你需要使用一个RegExp构造函数时使用双转义。

正则表达式的说明

  • ^ - 启动串锚
  • (https?) - 捕获组匹配httphttps(请注意,你可以,如果你不使用反向引用删除圆括号)
  • :\\/\\/ - 从字面上匹配://(注意,您不必在构造函数中跳过斜线,因为它不允许使用分隔符,因此您可以编写://
  • (w{3}\\.)? - (因为?量词),该信w,恰好3次出现和文字点
  • chateauversailles匹配的可选捕获组 - 匹配指定字母序列1周时间
  • (-spectacles)? - 可选组匹配-spectacles或由于?量词而没有任何结果。
  • \\.fr/ - 匹配.fr/字面上
  • .+ - 匹配比换行符
  • $其他任何1个或多个字符 - 字符串的结尾。
+0

多么好的,详细的答案。一个很好的正则表达式教程。 –

+0

欢迎您:) –

相关问题