Я бы хотел, чтобы пользователи моего приложения могли писать плагины в Javascript, которые расширяют его функциональность, не предоставляя доступ ни к чему, кроме предоставляемого мною объекта API плагина.Например, плагин может выглядеть следующим образом:
plugin.hookSomeUserAction(function() {
plugin.doSomethingWickedAwesome();
document.title = 'hacked!'; //shouldn't work
});
Кажется, что 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>
К сожалению, это попытка заставить уговор повторно изменить код JavaScript, который я уже уговорил.Я определенно не заинтересован в том, чтобы сервер повторно уговаривал каждый плагин на каждый запрос;Я просто откажусь от него при загрузке и сохраню его готовым к использованию.
Я также не могу найти никакой документации о том, как и где указывать, что входит в IMPORTS___ (учитывая, что это целая модель безопасности, этокажется странным упущением в документации).Это объект, передаваемый в .run ()?