作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否可以通过 DOM 操作将 javascript 模块沙盒化?例如
var Core = {
register: function(config){config.init()},
publicApi: {
msgbox: function(msg){alert(msg)}
}
}
Core.register({
name: 'testmodule',
init: function(){
/* from there i want to see only function defined in Core.publicApi, no jQuery direct access, no DOM */
}
});
最佳答案
嗯,有点:您可以将函数沙盒化,但它的调用者也将被沙盒化。这意味着即使是 Core.publicApi
中的内容也无法访问 document
等。或者,至少,Javascript 中没有允许这种桥接的防弹沙盒。
您可以通过临时覆盖 window
变量来削弱可用的内容:
var window = {"Core": Core};
但是这样没有全局变量(即使是alert
)将存在于被调用者。这很可能会破坏您的 API。
您可以将另一个成员(如 _unsandboxed
或其他)添加到新的 window
变量中,以允许您的 API 访问这些成员。但是,正如我所说,它不是万无一失的,因为沙盒函数仍然可以访问 _unsandboxed
。
关于javascript - 沙盒javascript模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2392834/
我是一名优秀的程序员,十分优秀!