2012-01-20 7 views
5

Me gustaría permitir que los usuarios de mi aplicación escriban complementos en Javascript que extienden su funcionalidad, sin permitir el acceso a ningún otro objeto que no sea un complemento de API que proporciono. Por ejemplo, un plugin puede tener un aspecto como el siguiente:¿Usar la caja para desinfectar Javascript?

plugin.hookSomeUserAction(function() { 
    plugin.doSomethingWickedAwesome(); 
    document.title = 'hacked!'; //shouldn't work 
}); 

Caja parece que debería ser capaz de hacer el trabajo, pero la documentación es quizás el peor de cualquier proyecto de código abierto que he visto (bastante ¡un logro!). Necesito ayuda para configurar el sistema.

He conseguido que el cajoler trabaje en la línea de comandos, y he engatusado uno de esos complementos para convertirlo en un tipo de Javascript optimizado. Parece que el Javascript engatusado espera que se proporcione un objeto "IMPORTS___", que debe contener todas las cosas a las que tiene acceso el complemento. ¡Muy prometedor hasta ahora!

Desafortunadamente, conseguir que el engorroso archivo Javascript para cargar y ejecutar realmente se haya convertido en un verdadero desastre. Por desgracia, el fragmento de código fuente in the docs está completamente equivocado, ya que la función loadCaja no aparece realmente en ninguna parte del tronco actual de google-caja. Localicé a un código que al menos hace algo :

<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> 

Por desgracia, lo que esto hace es tratar de obtener la cajoler para volver a convencer el javascript que ya he antojó. Definitivamente estoy no interesado en hacer que el servidor vuelva a engatusar cada complemento en cada solicitud; Lo engatusaré al subirlo y lo guardaré listo para usar.

Tampoco puedo encontrar ninguna documentación sobre cómo o dónde especificar lo que entra en IMPORTS___ (dado que ese es el modelo de seguridad completo, parece una extraña supervisión en la documentación). ¿Es ese el objeto que se pasa a .run()?

Respuesta

0

Curiosamente, mi único conocimiento de Caja proviene del ángulo de haber leído el código fuente de SES solamente y no tener conocimiento del contexto para su uso. Encontré que el código fuente está increíblemente bien documentado en comparación con cualquier documentación que exista o no en el exterior.

http://code.google.com/p/es-lab/source/browse/trunk/src/ses/initSES.js

+1

¿Puedo preguntar, qué es SES? – Coffee

Cuestiones relacionadas