2011-04-06 43 views
3

我正在觀看製作一個好的JavaScript應用程序基礎設施的視頻。基本上它說的是:如何限制對javascript對象的訪問?

  • 你的應用程序由組件
  • 組件是可以自己行動的頁面的部分。
  • 組件可以註冊到應用程序中。
  • 註冊後,他們得到自己的沙箱。
  • 沙箱是應用程序內核的組件接口。
  • 核心是建立在JavaScript庫的頂部。
  • 組件只能訪問他們的沙盒,而不能訪問其他組件,無法訪問核心或底層庫。

現在,我想要製作的是一個應用程序,您可以輕鬆製作新組件。組件在頁面上有自己的部分,它們可以在其中工作。下面是我的問題的第一部分:我想給這些組件一個jQuery對象的副本,但它有一個內部限制,因此它只能在某個包含某個元素的內部工作。

第二部分是,即使組件使用jquery訪問DOM的權限有限,它仍然可以訪問該文檔。在運行我的測試腳本之前,我已經嘗試將Window和Document設置爲null,但瀏覽器不允許這樣做。有什麼辦法可以真正限制一個對象的可能性嗎?我可以將它傳遞給它的方法嗎?

+0

您可能想再觀看一段視頻。 – 2011-04-06 16:55:08

+0

我想我很瞭解視頻的內容,謝謝。我只是試圖擴展沙箱的概念,給組件不僅是他們自己的腳本沙箱,而且還在DOM方面。 – bigblind 2011-04-07 14:47:41

回答

1

你在這裏誤解了這一點。其目的不是「使組件100%不可能被其他組件無法使用」。唯一的辦法就是Facebook採取的非常複雜的步驟,即解析JS/HTML代碼並重新編寫它以禁用某些引用等。我敢打賭,他們的開發團隊需要1000多個小時才能完成做和它仍然有漏洞。

基本上打算給每個組件一個沙箱玩,然後說「請只使用這個」。作者隨後遵守這一要求。 (假設您位於不同的子域並且您提供了父窗口代理),您的唯一其他選擇是iFrame,在這種情況下,組件可以做任何它想做的事情,並且不會影響任何內容(假設您位於不同的子域並且您提供了父窗口代理)。

+0

值得注意的是,當作者引用沙盒時,它並不是指HTML DOM的一部分,而是指JavaScript代碼本身的一部分。一個組件中的代碼不應該能夠在不明確發佈的情況下調用另一個組件中的隨機函數。 – Zimzat 2011-04-06 17:03:02

+0

我不知道,也沒有沙盒DOM的錯誤。這就是我所做的 - 說「這裏是一個div,玩的很好」 – 2011-04-06 17:07:50

+0

即使在框架中,Javascript也沒有通過頂端訪問父窗口? – 2011-04-06 17:08:59