Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是击倒JS“;“全球安全”吗;?_Javascript_Jquery_Knockout.js - Fatal编程技术网

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
之外,我只知道两点:

  • 在一些地方,它会检查window.jQuery的(最低版本)是否存在,并使用那些过度内置的特性
  • 在某些地方(例如),它检查require库的存在并使用它们(以一种假定的与库无关的方式)
  • 但KO不会在任何地方修改
    窗口
    (除了添加
    KO
    ),AFAIK

    我希望在这个软件中使用KnockoutJS,并确保我对KnockoutJS的使用不会与网站/CMS环境使用的KnockoutJS的任何实例发生冲突

    那是另一个问题。如果应用程序的多个部分都使用KnockoutJS而彼此不了解,则存在两个主要问题:

  • 共享DOM的方式可能会发生冲突。最简单的例子是CMS可能会在
    主体上运行
    ko.applyBindings
    ,因此任何想让不同版本的ko处理其DOM部分的插件都会有问题。这里不可能给出一般性的建议,这一切都归结于上下文和细节
  • 加载两个不同版本的敲除。显然,如果不执行任何操作,则加载的第二个版本将覆盖
    window.ko
    。虽然应该有解决办法,但你可能不得不深入研究。基本上,你在最后一段提到了这一点
  • KnockoutJS库是否依赖于除全局ko对象之外的任何全局状态

    几乎没有。除了将
    ko
    导出到
    window
    之外,我只知道两点:

  • 在一些地方,它会检查window.jQuery的(最低版本)是否存在,并使用那些过度内置的特性
  • 在某些地方(例如),它检查require库的存在并使用它们(以一种假定的与库无关的方式)
  • 但KO不会在任何地方修改
    窗口
    (除了添加
    KO
    ),AFAIK

    我希望在这个软件中使用KnockoutJS,并确保我对KnockoutJS的使用不会与网站/CMS环境使用的KnockoutJS的任何实例发生冲突

    那是另一个问题。如果应用程序的多个部分都使用KnockoutJS而彼此不了解,则存在两个主要问题:

  • 共享DOM的方式可能会发生冲突。最简单的例子是CMS可能会在
    主体上运行
    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