2011-12-04 8 views
6

Quiero crear una aplicación local que tenga una interfaz de usuario basada en el navegador en lugar de una GUI independiente basada en MFC/Qt/etc. Si no deseo ejecutar un servidor web en la máquina local, ¿cómo puedo implementarlo? las partes dinámicas de mi aplicación? ¿Puede el navegador apuntar a scripts, ejecutables o bibliotecas locales en la máquina? ¿Puedo usar una base de datos local directamente? ¿Qué riesgos existen con este enfoque?¿Es posible escribir una aplicación web local que no necesita un servidor?

+0

¿Cuál es el proceso que le ha llevado a esta decisión? – u07ch

+0

HTTP + CSS son excelentes para hacer una GUI dinámica y portátil. Pero un servidor es un inconveniente de una aplicación web local, lo que significa que la instalación necesita elevación, etc. Por eso, si es posible, desea evitar el servidor. – paperjam

+2

@paperjam: un servidor realmente no necesita privilegios de root para instalar.Correr en el puerto 80 lo necesita pero puede ejecutar su servidor en otros puertos. Hemos hecho esto para implementar una versión de escritorio de nuestra aplicación web. Básicamente, un servidor perl mínimo (nuestra aplicación está en perl) ejecutándose en un puerto aleatorio y un ejecutable webkit personalizado que se conecta al servidor. Elegimos webkit para construir nuestro navegador personalizado porque es compatible con Big 3: Windows, Mac y Linux. – slebetman

Respuesta

4

Sí, pero con limitaciones. La principal limitación es que no puede hacer nada de CGI porque el navegador abrirá y mostrará el código fuente de su script en lugar de ejecutarlo. Esto tiene varias implicaciones:

  1. No se puede conectar a una base de datos. Esto hace que sea difícil hacer cosas comunes como almacenar estados y datos de usuario.
  2. No puede establecer el tipo de contenido. Esto significa que no puede hacer ningún tipo de cosas elegantes de XML como servir archivos SVG o usar XML en XMLHttpRequest.
  3. No puede generar imágenes dinámicas (con ImageMagick o GD). Aunque con HTML5 puedes hacerlo con el lienzo.
  4. No puede leer o escribir en el sistema de archivos. De nuevo, esto limita su capacidad para guardar datos. Pero se puede hacer con los permisos de usuario correctos (más sobre esto a continuación).

Pero hay soluciones. HTML5 le permite almacenar datos en el almacenamiento local, pero obviamente esto no funcionará en navegadores más antiguos. Puede almacenar datos en cookies, pero eso tiene limitaciones de tamaño. Finalmente, puedes guardar en el archivo. Debe indicar a sus usuarios que modifiquen las preferencias de su navegador para permitir que su script haga esto, pero se puede hacer. Un ejemplo de esto es TiddlyWiki. Es una wiki personal autónoma en un solo archivo HTML. Cada vez que guardas contenido nuevo, la página se modifica y se guarda a sí misma. Es posible que desee ver cómo lo hacen en busca de inspiración.

1

Si quiere la ruta HTML pura HTML5 le permitirá crear una base de datos local en el navegador; con suficiente experiencia en la codificación de JavaScript podría escribir todo un sitio en él que represente todo en JS en lugar de cargar archivos HTML. Carga un archivo y muestra todo después de eso usando el motor de JavaScript.

Si se trata de una aplicación con sentido y puedes escribirla sin enojarte.

Si está en Windows, puede hacer trampa y usar Active x/vbscript, pero si lo hace, ¿por qué no escribe un clic una vez .NET aplicación. Sin tener algún componente de aplicación de servidor web, el navegador no podrá hablar con un motor de base de datos tradicional.

2

Creo que sus únicas opciones en términos de scripting serían Javascript en este escenario. (O Java Applets o Flash, pero no creo que quiera eso)

Sugiero que eche un vistazo al paquete web incrustado de QT. Podrías usarlo para insertar un navegador en una aplicación QT simple y usarlo para la mayoría de tu IU, entonces tienes el poder de C++/QT para tu back-end. QT puede vincular el código de C++ directamente a Javascript.

Consulte el QWebFrame class, especialmente el método addToJavaScriptWindowObject, y el Qt WebKit Bridge.

Cuestiones relacionadas