2011-07-30 9 views
5

Me gustaría poder utilizar una serie de métodos de utilidad de jQuery en un trabajador web, donde no hay acceso a los objetos window o document.subconjunto no DOM de jQuery

Específicamente, me gustaría poder utilizar métodos como $.extend(), $.ajax(), y todo el sistema $.Deferred(). Obviamente no necesitaría ninguno de los métodos de cruce y manipulación DOM, así que no estoy buscando una solución como JSDOM.

Puedo extraer las partes que no son DOM de jQuery, pero este es un problema para mantener. ¿Hay distribuciones disponibles o scripts de compilación para jQuery que solo compilan las porciones que no son DOM?

+0

No se pudo usted sólo tiene que utilizar la versión estándar de jQuery, y simplemente evitar llamar a cualquier operación que se basan en '' window' y document'? – aroth

+0

@aroth, eso es difícil porque parece que una gran cantidad del código de inicialización de jQuery (no solo los métodos que el código del cliente llama explícitamente) se basa en la presencia de la API completa del navegador. – kpozin

+0

Parece que [jQuery.Hive] (https://github.com/rwldrn/jquery-hive/blob/master/jquery.hive.pollen.js) intenta hacer esto en parte, pero están reescribiendo un muchos métodos de jQuery y no parecen estar sincronizados con el ciclo de publicación de jQuery. – kpozin

Respuesta

3

Mi respuesta: https://github.com/kpozin/jquery-nodom.

Hasta ahora, lo tengo trabajando y probado con $.Deferred() y un subconjunto de $.ajax() dentro de un contexto de Trabajador web. Documentación y posibles suites de prueba que vendrán después.

Una compilación de prueba inicial está disponible: jquery.nodom.js

+0

¡Genial! Veo que el último compromiso fue hace unos años - ¿es porque no ha habido cambios relevantes en las versiones más nuevas de jQuery? ¿O no se está manteniendo este proyecto? –

+1

No he estado manteniendo esto porque no lo he necesitado desde hace tiempo. Para '$ .Deferred' , una buena alternativa que no es DOM es [subrayado.Deferido] (https://github.com/wookiehangover/underscore.Deferred). Si alguien se encuentra con un contenedor 'XMLHttpRequest' que coincide con la API' $ .ajax', comente . – kpozin

0

jQuery es de código abierto, puede clonar fácilmente el repositorio de git, crear un repositorio de compilación que arranque las partes que le gustan (creo que el desarrollo de jQuery está dividido en módulos) y simplemente revisar el sistema de compilación mientras mantiene su jQuery clonar al día. A continuación, podría abrir la fuente de ese imbécil y resolver este problema para siempre. Parece que alguien ya se ha dirigido a este particular question in this thread.

+1

¡Desafío aceptado! Volveré a usted. – kpozin

+0

Aquí está la [solución] (http://stackoverflow.com/questions/6881344/non-dom-subset-of-jquery/6887621#6887621). – kpozin