Estoy escribiendo una aplicación que permite a los usuarios generar imágenes con Raphael.JS. Una de las características secundarias que quiero es generar un PNG del lienzo de Rafael.Programemente genera PNG desde la imagen Raphael.JS
Aquí está la tubería general de mi cabeza:
- entradas Parámetros de Usuario
- Generamos JS con Raphael llama
- Generamos un envoltorio de JS que hace lo anterior y llama .innerHTML en el div que contiene , que nos da SVG (que luego enviamos alguna parte)
- ejecutamos la envoltura JS
- el SVG es enviado a ImageMagick y fuera aparece un PNG
El paso 4 es el paso sobre el que necesito orientación. El usuario podría estar usando IE; no tenemos garantía de que el JS se ejecute alguna vez en un navegador SVG. En cualquier caso, necesitaríamos que esto se ejecute en el lado del servidor para que sea confiable. Estas son las tres posibilidades que he encontrado hasta ahora:
- Instale Firefox en el servidor y ejecute el resultado de (3) en Firefox. Esta opción apesta porque instalar FF significa instalar un montón de cosas X en nuestro servidor, ejecutar FF conlleva un montón de sobrecarga, y realmente no quiero perder el tiempo con el seguimiento del proceso y matarlo una vez que lo haya hecho.
- Use Node.js + jsdom (http://github.com/tmpvar/jsdom). Lo malo aquí es que no está claro qué tan compatible es jsdom, el supuesto sitio, jsdom.org, realmente no existe. Además, no puedo encontrar ninguna documentación.
- ¿Quizás haga algo con Rhino? Por lo que puedo decir, Rhino tiene aún más apoyo de DOM que Node.
Así que ... las tres de esas opciones tipo de suck. Creo. ¿Estoy equivocado sobre algo? ¿Hay otra manera?
Genial ... gracias. Eso realmente podría funcionar, aunque mi sentido de Spidey es un hormigueo ante la idea de confiar en la salida del navegador del usuario. No puedo poner mi dedo en el riesgo, pero confiar en ese tipo de cliente corriendo me asusta. ¿Qué piensas? ¿Estoy siendo paranoico?No hay forma de que un usuario cree una imagen de Raphael sin cargar una página en la que se representa, y creo que esperamos que nuestros usuarios tengan JS habilitado ... – rfrankel
@rfrankel Por supuesto, nunca puede confiar en la información del navegador y siempre habrá posibles exploits (en el motor XSLT por ejemplo) incluso con una entrada bien formada, pero creo que validar que tu entrada es de hecho SVG sería un buen comienzo. – robertc
Claro - Ni siquiera estaba pensando realmente en los riesgos de seguridad (que sé cómo manejar) hasta casos límite en los que crearemos correctamente la imagen de Raphael pero no la PNG porque el navegador del usuario hace algo raro o falla o lo que sea. – rfrankel