the KnockoutJS library是否依赖于除全局ko
对象之外的任何全局状态?还是有时间从javascript环境的全局状态中添加/减去其他项(即浏览器中的window.
对象)
我之所以这样问是因为我正在创建一款将部署到网站/ CMS环境中的软件。我希望该软件自成一体,而不依赖外部CDN资源。我想在此软件中使用KnockoutJS,并确保我对KnockoutJS的使用不会与网站/ CMS环境所使用的KnockoutJS的任何实例发生冲突。我不想有条件地加载外部KnockoutJS资源,因为我想确保软件运行的Knockout版本符合我的想法。
我对jQuery有类似的要求-我知道我可以通过修改jQuery库以导出不同的全局变量来完成此任务-即var myJquery=...
。我想对Knockout的ko
变量做同样的事情-但是,如果KnockoutJS依赖于全局状态,那将无法正常工作。
最佳答案
KnockoutJS库是否依赖于全局ko对象以外的任何全局状态?
几乎没有。我知道的除了将ko
导出到window
之外,只有两点:
在一些地方,它检查window.jQuery
的存在(最低版本),并使用其内置功能。
在某些地方(例如the component default loader),它检查是否存在需求库并使用它们(以与库无关的方式)。
但是KO不会在AFAIK的任何地方修改window
(除了添加ko
之外)。
我想在此软件中使用KnockoutJS,并确保我对KnockoutJS的使用不会与网站/ CMS环境所使用的KnockoutJS的任何实例发生冲突。
那是另外一个问题。有一个应用程序的多个部分都使用KnockoutJS而不相互了解的两个主要问题是:
以可能会冲突的方式共享DOM。最简单的示例是CMS可能在ko.applyBindings
上运行body
,因此任何希望使用不同版本KO的插件都将处理其DOM问题。这里不可能提供一般性建议,所有这些都取决于具体情况和具体情况。
加载两个单独的Knockout版本。显然,如果不执行任何操作,则加载的第二个版本将覆盖window.ko
。尽管应该有解决方法,但是您可能必须深入研究KO's source code。基本上,您在最后一段中提到了这一点。
关于javascript - KnockoutJS是否“全局安全”?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37900814/