繁体   English   中英

如何沙箱JS库?

[英]How do I sandbox a JS lib?

我正在使用javascript库,但由于我在这个大站点上有其他库,因此似乎无法使用。 有什么办法可以将其沙盒化吗? 也许将其放在iframe中,然后在我的javascript类中分配一个var为

var myvar = iframe.theJSlib;

我只是在写一个主意。 我不知道如何沙盒化,是否可以完成。 如何在Javascript库中沙箱化并访问它?

这就是为什么我们尝试将var排除在全局范围之外。 尝试用自己的函数将库中的所有内容括起来,如下所示:

(function(){
  // the library code
}());

请记住,这只会修复显式声明的变量,例如var foo = 'bar'; 但不会修复隐式声明的变量,例如foo = 'bar' ,该变量仍将分配给全局对象,最有可能是window

您还可以尝试将所有代码更改为使用单个名称空间,如下所示:

var myApp = {};

myApp.foo = { /* maybe my validator code */ };
myApp.bar = { /* maybe my utilities code */ };

将其放入iframe中肯定会阻止其正常工作。 您所能做的就是将有问题的代码包装在一个函数中,以便一切都在该函数的范围内运行。

请参阅: Javascript Namespacing

并且: JavaScript命名空间

您不能一次将一个库沙箱化。 您必须通过在兼容模式下在它们自己的名称空间中运行它们来对它们进行沙盒化:

(function(myLib){
    // do stuff with this lib here
})(theLongLibname)

将其放在匿名函数中:

(function(){
    // >Your code goes here<
})();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM