我正在使用一个 javascript 库,但由于我在这个大网站上的其他库,它似乎失败了。有没有办法可以以某种方式沙箱?也许把它放在一个 iframe 中,然后在我的 javascript 类中分配一个 var 作为
var myvar = iframe.theJSlib;
我只是写一个想法。我不知道如何沙箱,也不知道是否可以完成。如何对 javascript 库进行沙箱处理并在我的主页中访问它?
我正在使用一个 javascript 库,但由于我在这个大网站上的其他库,它似乎失败了。有没有办法可以以某种方式沙箱?也许把它放在一个 iframe 中,然后在我的 javascript 类中分配一个 var 作为
var myvar = iframe.theJSlib;
我只是写一个想法。我不知道如何沙箱,也不知道是否可以完成。如何对 javascript 库进行沙箱处理并在我的主页中访问它?
这就是我们练习将 vars 排除在全局范围之外的原因。尝试将 lib 中的所有内容包含在其自己的函数中,如下所示:
(function(){
// the library code
}());
请记住,这只会修复显式声明的变量,var foo = 'bar';
但不会修复隐式声明的变量,如foo = 'bar'
,它仍然会分配给全局对象,很可能window
。
您还可以尝试更改所有代码以使用单个命名空间,如下所示:
var myApp = {};
myApp.foo = { /* maybe my validator code */ };
myApp.bar = { /* maybe my utilities code */ };
把它放在一个匿名函数中:
(function(){
// >Your code goes here<
})();
将它放入 iframe 肯定会阻止它正常工作。您所能做的就是将有问题的代码包装在一个函数中,以便一切都在该函数的范围内运行。
请参阅:Javascript 命名空间
您不能一次只沙箱一个库。您必须通过在它们自己的命名空间中以兼容模式运行它们来将它们全部沙箱化:
(function(myLib){
// do stuff with this lib here
})(theLongLibname)