Ben*_*lts 5 javascript google-caja
我想允许我的应用程序的用户在Javascript中编写扩展其功能的插件,而不允许访问除我提供的插件API对象之外的任何内容.例如,插件可能如下所示:
plugin.hookSomeUserAction(function() {
plugin.doSomethingWickedAwesome();
document.title = 'hacked!'; //shouldn't work
});
Run Code Online (Sandbox Code Playgroud)
Caja看起来应该能够完成工作,但文档可能是我见过的任何开源项目中最糟糕的(非常成就!).我需要一些帮助来设置系统.
我已经在命令行上使用了cajoler,并且我已经将一个这样的插件哄骗到某种有希望被清理的Javascript中.困惑的Javascript看起来像是期待提供一个"IMPORTS___"对象,它应该包含插件可以访问的所有东西.到目前为止很有前途!
不幸的是,让那个惹恼Javascript的文件实际加载并运行已经变成了一个真正的混乱.不幸的是,文档中的源代码段完全错误,因为函数loadCaja实际上并没有出现在google-caja的当前主干中的任何位置.我找到了一些代码,至少做了些什么:
<div id="plugin"></div>
<script>
caja.configure({
cajaServer: "/js/caja"
}, function(frameGroup) {
frameGroup.makeES5Frame(document.getElementById('plugin'),
{ /* No network access */ },
function(frame) {
frame.url('/js/plugins/test.js')
.run({});
}
);
});
</script>
Run Code Online (Sandbox Code Playgroud)
不幸的是,它的作用是尝试让cajoler重新调整我已经哄骗过的javascript.我绝对不想让服务器在每个请求上重新调用每个插件; 我只是在上传时将其哄骗并将其存储起来以备使用.
我也找不到任何关于如何或在何处指定IMPORTS___内容的文档(鉴于这是整个安全模型,它似乎是文档中的一个奇怪的疏忽).是传递给.run()的对象吗?
小智 0
有趣的是,我对 Caja 的唯一了解来自于仅阅读了 SES 源代码并且不了解其使用上下文的角度。我发现源代码的文档记录得非常好,而不是外部存在或不存在的任何文档。
http://code.google.com/p/es-lab/source/browse/trunk/src/ses/initSES.js
| 归档时间: |
|
| 查看次数: |
783 次 |
| 最近记录: |