Javascript 是击倒JS“;“全球安全”吗;?
是否依赖于全局Javascript 是击倒JS“;“全球安全”吗;?,javascript,jquery,knockout.js,Javascript,Jquery,Knockout.js,是否依赖于全局ko对象以外的任何全局状态?或者,是否有时间可以从javascript环境的全局状态(即浏览器中的窗口。对象)中添加/减去其他项 我这样问是因为我正在创建一个软件,它将被部署到web站点/CMS环境中。我希望该软件是独立的,而不是依赖于外部CDN资源。我希望在这个软件中使用KnockoutJS,并确保我对KnockoutJS的使用不会与网站/CMS环境使用的KnockoutJS的任何实例发生冲突。我不想有条件地加载外部KnockoutJS资源,因为我希望确保Knockout我的软件
ko
对象以外的任何全局状态?或者,是否有时间可以从javascript环境的全局状态(即浏览器中的窗口。
对象)中添加/减去其他项
我这样问是因为我正在创建一个软件,它将被部署到web站点/CMS环境中。我希望该软件是独立的,而不是依赖于外部CDN资源。我希望在这个软件中使用KnockoutJS,并确保我对KnockoutJS的使用不会与网站/CMS环境使用的KnockoutJS的任何实例发生冲突。我不想有条件地加载外部KnockoutJS资源,因为我希望确保Knockout我的软件运行的版本与我所认为的一样
我对jQuery也有类似的要求——我知道我通过修改jQuery库来导出不同的全局变量来实现这一点——即var myJquery=…
。我想对Knockout的ko
变量做同样的事情——但是如果KnockoutJS依赖于全局状态,那么它就不能正常工作
KnockoutJS库是否依赖于除全局ko对象之外的任何全局状态
几乎没有。除了将ko
导出到window
之外,我只知道两点:
窗口
(除了添加KO
),AFAIK
我希望在这个软件中使用KnockoutJS,并确保我对KnockoutJS的使用不会与网站/CMS环境使用的KnockoutJS的任何实例发生冲突
那是另一个问题。如果应用程序的多个部分都使用KnockoutJS而彼此不了解,则存在两个主要问题:
主体上运行ko.applyBindings
,因此任何想让不同版本的ko处理其DOM部分的插件都会有问题。这里不可能给出一般性的建议,这一切都归结于上下文和细节
window.ko
。虽然应该有解决办法,但你可能不得不深入研究。基本上,你在最后一段提到了这一点ko
导出到window
之外,我只知道两点:
窗口
(除了添加KO
),AFAIK
我希望在这个软件中使用KnockoutJS,并确保我对KnockoutJS的使用不会与网站/CMS环境使用的KnockoutJS的任何实例发生冲突
那是另一个问题。如果应用程序的多个部分都使用KnockoutJS而彼此不了解,则存在两个主要问题:
主体上运行ko.applyBindings
,因此任何想让不同版本的ko处理其DOM部分的插件都会有问题。这里不可能给出一般性的建议,这一切都归结于上下文和细节
window.ko
。虽然应该有解决办法,但你可能不得不深入研究。基本上,你在最后一段提到了这一点避免jQuery冲突的正确方法是使用为此目的提供的
.noConflict()
API。@我感谢您的参与,但我不确定您是否理解我试图解决的问题。网站A使用jQuery1.8。我的软件是一个非生产性开发工具,需要使用jQuery 1.9。我可以使用上述技术包含一个稍微分叉的jQuery。这可以确保网站仍然在运行自己的jQuery1.8,并且我可以在jQuery1.9上运行我的代码。这肯定不是标准用例,但它是商业扩展业务中常见的技术。.noConflict()
API实际上是为满足您所描述的内容而设计的。当jQuery初始化时,它会保存为$
和jQuery
找到的任何值。调用jQuery.noConflict(true)
将这些全局符号返回到其原始值。您可以随意保留对jQuery的引用。@Pointy不太可能,但我明白您为什么这么说。jQuery文档可能提到运行两个jQuery,但它也包含警告“不推荐”,并假设您完全控制第二个jQuery。尝试在上述场景中使用noConflict的问题是,我无法控制何时引入jQuery。它是在网站的jQuery之前还是之后?fork技术更安全、更可靠,并且对这个特定实例产生的支持请求要少得多。关于jQuery.noConflict(true)
的有用信息——谢谢!如果jQuery是第一个,则调用.noConflict(tr