knockout.js 为什么在敲除安全绑定中遇到此语法错误

nc1teljy  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(135)

我正在使用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的内容。
我错过了什么?

z4iuyo4d

z4iuyo4d1#

默认的Knockout绑定提供者允许任何有效的JS表达式。KSB的目的就是改变这种行为,所以像这样的东西不再起作用是有道理的。
你可能应该把正则表达式移到一个计算出的可观测项上。

相关问题