2011-12-04 6 views
6

Voglio creare un'applicazione locale che abbia un'interfaccia utente basata su browser piuttosto che un'interfaccia grafica stand-alone basata su MFC/Qt/ecc. Se non voglio eseguire un server web sul computer locale, come posso implementare le parti dinamiche della mia app? Il browser può essere indirizzato a script locali, eseguibili o librerie sulla macchina? Posso usare direttamente un database locale> Quali sono le insidie ​​con questo approccio?È possibile scrivere un'applicazione web locale che non ha bisogno di un server?

+0

Qual è il processo che ti ha portato a questa decisione? – u07ch

+0

HTTP + CSS sono ottimi per creare una GUI dinamica e portatile. Ma un server è un inconveniente di un'applicazione web locale che probabilmente significa che l'installazione ha bisogno di elevazione, ecc. Ecco perché - vuoi evitare il server se possibile. – paperjam

+2

@paperjam: un server non ha realmente bisogno dei privilegi di root da installare.Funziona sulla porta 80, ma è possibile eseguire il server su altre porte. Lo abbiamo fatto per implementare una versione desktop della nostra app Web. Fondamentalmente un server perl minimo (la nostra app è in perl) in esecuzione su una porta casuale e un eseguibile webkit personalizzato che si connette al server. Abbiamo scelto il webkit per creare il nostro browser personalizzato perché supporta il grande 3: Windows, Mac e Linux. – slebetman

risposta

4

Sì, ma con limitazioni. La principale limitazione è che non si possono fare cose CGI perché il browser si aprirà e visualizzerà il codice sorgente dello script invece di eseguirli. Ciò ha diverse implicazioni:

  1. Non è possibile connettersi a un database. Ciò rende difficile fare cose comuni come la memorizzazione di stati e dati utente.
  2. Non è possibile impostare il tipo di contenuto. Ciò significa che non è possibile eseguire operazioni XML di tipo come la pubblicazione di file SVG o l'uso di XML in XMLHttpRequest.
  3. Non è possibile generare immagini dinamiche (con ImageMagick o GD). Sebbene con HTML5 puoi farlo con la tela.
  4. Non è possibile leggere o scrivere sul file system. Di nuovo questo limita la tua capacità di salvare i dati. Ma può essere fatto con permessi utente corretti (maggiori informazioni qui sotto).

Ma ci sono soluzioni alternative. HTML5 ti consente di memorizzare i dati nella memoria locale, ma ovviamente questo non funzionerà con i browser più vecchi. È possibile archiviare i dati nei cookie, ma questo ha limitazioni di dimensioni. Finalmente puoi effettivamente salvare su file. Devi istruire i tuoi utenti a modificare le loro preferenze del browser per consentire al tuo script di farlo, ma può essere fatto. Un esempio di questo è TiddlyWiki. È una wiki personale autonoma in un singolo file HTML. Ogni volta che salvi nuovi contenuti, la pagina si modifica e si salva. Potresti voler vedere come lo fanno per l'ispirazione.

1

Se si desidera il percorso HTML puro, HTML5 consente di creare un database locale nel browser; con sufficiente esperienza di codifica javascript è possibile scrivere un intero sito al suo interno che rende tutto in JS piuttosto che caricare file HTML. Carica un file e rende tutto dopo quello usando il motore javascript.

Se è un'app significativa e puoi scriverlo in quel modo senza impazzire.

Se sei su Windows puoi imbrogliare e usare Active x/vbscript - ma se lo fai perché non scrivi un clic una volta. Applicazione .net. Senza disporre di un componente dell'applicazione server Web, il browser non sarà in grado di parlare con un motore di database tradizionale.

2

Credo che le tue uniche opzioni in termini di script siano Javascript in questo scenario. (O applet Java o Flash, ma non credo che lo vogliate)

Suggerirei di dare un'occhiata al webkit incorporato di QT. Puoi utilizzarlo per incorporare un browser in una semplice app QT e utilizzarlo per la maggior parte dell'interfaccia utente, quindi hai la potenza di C++/QT per il tuo back-end. QT è in grado di collegare il codice C++ direttamente a Javascript.

Vedere QWebFrame class, in particolare il metodo addToJavaScriptWindowObject e Qt WebKit Bridge.