我正在使用Knockout Secure Binding(KSB)使Knockout与Chrome浏览器扩展中的内容安全策略兼容。
以下代码适用于Knockout的默认绑定器,其中plaintext
是一个返回字符串的可观察值:
<section data-bind="foreach: plaintext().match(/.{1,17}/g)">
但是,当尝试应用与KSB的绑定时,此错误将记录到控制台:
{
name: "SyntaxError",
message: "Expected ')' but got '/'",
at: 28,
text: "foreach: plaintext().match(/.{1,17}/g)"
}
因为/
似乎是问题所在,所以我尝试使用以下语法创建RegExp:
<section data-bind="foreach: plaintext().match(new RegExp('.{1,17}', 'g'))">
但KSB同样抱怨,这一次:
{
name:"SyntaxError",
message:"Expected ')' but got 'n'",
at:28,
text:"foreach: plaintext().match(new RegExp('.{1,17}', 'g'))"
}
这意味着它不会接受match()
括号内的任何内容。在阅读文档和repo问题时,我没有发现任何关于不使用KSB的match或regex的内容。
我错过了什么?
1条答案
按热度按时间z4iuyo4d1#
默认的Knockout绑定提供者允许任何有效的JS表达式。KSB的目的就是改变这种行为,所以像这样的东西不再起作用是有道理的。
你可能应该把正则表达式移到一个计算出的可观测项上。