如何在Chrome Packaged App中使用KnockoutJs进行MVVM?它不允许在html中使用内联JS

How to do MVVM using KnockoutJs in Chrome Packaged App? it doesntt allow inline JS in html

本文关键字:不允许 html JS KnockoutJs Chrome Packaged App 进行 MVVM      更新时间:2023-09-26

现在我正在使用KnockoutJs,我想开发Chrome打包应用程序。我想知道如何绑定数据MVVM。因为在http://developer.chrome.comsaid不能在html中使用内联javascript。JS必须是分开的文件。

那么,我如何编写这个MVVM工作点击?甚至更多的是淘汰赛?

<span data-bind="text : $data.name, click : $root.load> </span>
<span data-bind="text:shoppingCart().somethingChange()"></span>

快速版本

除非你对页面进行沙盒处理并删除某些功能,否则你无法真正使用它。


长版本

Chrome Packaged Apps要求代码和使用的任何库都符合CSP。换句话说,不可能使用eval()new Function()、任何<script></script> HTML标记和其他一些东西。

Knockout将其中一些用于绑定和模板。因此,您不能将Knockout has用于Chrome Packaged Apps。

此外,我发现一些信息指出,Knockout的开发人员并不打算使其符合CSP。你可以在他们的Git回购中找到这个。

Chrome扩展也存在一些非常相似的问题。我读到的关于这个主题的文章涉及到一个iframe的沙箱。。。经过更多的挖掘,沙箱将导致页面无法使用某些功能。

唯一的选择是使用Knockout的自定义绑定提供程序。然而,我发现在这一点上使用另一个MV*库更具吸引力。

AFAIK此

除非你对页面进行沙盒处理并删除某些内容,否则你无法真正使用它功能。

不再适用。

只要添加:

"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'",

到manifest.json.的根级别

我只是简单地试了一下:<h1 data-bind="text: version().length"></h1>

default_popup页面中,并且没有发现任何问题,至少对于Chrome的:48.0.2564.116(64位)版本

看起来您正在尝试绑定文本,而不是一个操作(如"单击"),因此最简单的方法是将计算的可观察对象添加到模型中,计算其函数中所需的值,并将其绑定到跨度。

Knockout的数据绑定在html中不使用内联javascript,html数据绑定属性只定义了一个字符串表达式,该表达式可能包含类似javascript的表达式,Knockout将从其外部脚本文件中解析并执行该表达式。您不应该在敲除MVVM的数据绑定方面遇到任何问题