簡體   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