我正在观看有关制作良好的 JavaScript 应用程序基础架构的视频。基本上它说的是:
- 您的应用程序由组件组成
- 组件是页面的一部分,可以独立运行。
- 可以将组件注册到应用程序中。
- 注册后,他们将获得自己的沙箱。
- 沙箱是组件与应用程序核心的接口(interface)。
- 核心构建在 javascript 库之上。
- 组件只能访问它们的沙箱,不能访问其他组件,也不能访问核心或底层库。
现在,我想制作一个应用程序,您可以在其中轻松制作新组件。组件在页面上有自己的部分,它们可以在其中工作的 div。这是我的问题的第一部分:我想给这些组件一个 jQuery 对象的副本,但是它应用了一个内部限制,因此它只能在某个包含元素内工作。
第二部分是,即使组件使用 jquery 对 DOM 的访问受到限制,它仍然可以访问文档。在运行我的测试脚本之前,我尝试将 Window 和 Document 都设置为 null,但浏览器不允许这样做。有什么方法可以真正将对象的可能性限制为我传递给它的 1 个对象的方法吗?
最佳答案
你误解了这里的要点。目的不是“使组件 100% 不可能访问任何不应访问的内容”。做到这一点的唯一方法是 Facebook 采取的极其复杂的步骤,即解析 JS/HTML 代码并重写它以禁止某些引用等。我敢打赌他们的开发团队花了 1,000 多个小时才完成这样做,它仍然有漏洞。
基本上,目的是给每个组件一个沙箱来玩,然后说“请只使用这个”。作者随后遵从了请求。
您唯一的其他选择是 iFrame,在这种情况下,组件可以做任何它想做的事,并且不会产生任何影响(假设您在不同的子域中,并且您提供父窗口代理)。
关于javascript - 如何限制对javascript对象的访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5569964/