我正在使用 Knockout Secure Binding (KSB) 使 Knockout 与 Chrome 浏览器扩展中的内容安全策略兼容。
以下使用 Knockout 的默认绑定(bind)器,其中 plaintext
是返回字符串的可观察值:
<section data-bind="foreach: plaintext().match(/.{1,17}/g)">
但是当尝试应用与 KSB 的绑定(bind)时,这个错误被记录到控制台:
{
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 的信息。
我在这里错过了什么?
最佳答案
默认的 Knockout 绑定(bind)提供程序允许任何有效的 JS 表达式。 KSB 的目的是改变这种行为,所以像这样的东西不再起作用是有道理的。
您可能应该将您的正则表达式移动到计算的可观察对象。
关于javascript - 为什么knockout-secure-binding会遇到这个语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57028136/