Autor Wątek: Aplikacja desktopowa z interfejsem przeglądarkowym  (Przeczytany 9795 razy)

Offline Reg

  • Administrator
    • Adam Sawicki - Home Page

# Maj 16, 2014, 17:29:20
Chciałbym napisać aplikację desktopową dla Windows, która by miała interfejs użytkownika w postaci strony HTML lub czegoś podobnego, żeby łatwo można było zrobić ładne ramki, tabelki i cały jego wygląd. Jak najlepiej to zrealizować? Bez ograniczeń na język programowania.

Opcje, jakie przychodzą mi do głowy:

- Jednak nie używać HTML, tylko jakiejś innej technologii tworzenia ładnego GUI, np. QML z Qt, WPF z .NET, Flash z Adobe Air.
- Napisać normalną aplikację w C++, .NET lub Java i osadzić w jej okienku systemową przeglądarkę internetową jako kontrolkę.
- Użyć jakiejś biblioteki lub aplikacji prostego serwera HTTP, z jego użyciem napisać swój program jako serwer WWW i łączyć się z nim z normalnej przeglądarki, pod jakiś adres na localhost.
- Starożytna technologia HTA :)

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Xirdus

  • Redaktor

# Maj 16, 2014, 17:42:37
QtWebkit może?

Offline bluebat

  • Użytkownik

# Maj 16, 2014, 18:40:30
Opcja z łączeniem do localhosta w przeglądarce odpada, jeżeli aplikacji ma używać zwykły użytkownik - zbyt dużo rzeczy może pójść nie tak i normalny człowiek się nie połapie, jak np. inna instancja aplikacji zajmie port albo nagle firewall będzie prosił o pozwolenie.

Najlepiej właśnie wpakować jakiś webview do aplikacji i tylko ogarnąć jakieś sensowne bindowanie JS-C++. Generowanie interfejsu z szablonów zrobiłbym już po stronie JSa jednym z wielu istniejących template enginów.

Jest jeszcze Awesomium. Wolfire games robi w tym interfejs, podobnie też jest zrobione R Studio (zostawili inspect element z webkita, więc można podejrzeć). Ale zależy od skali twojego projektu, bo do mniejszych rzeczy Awesomium może być armatą na muchę.

Offline lethern

  • Użytkownik

# Maj 16, 2014, 18:43:21
Nie znam się na tym za dużo, więc moją wypowiedź potraktujcie jako luźne rozmyślania
Nie wiem dlaczego tak rozmyty temat, nie potrafię wyczytać czy chcesz napisać przeglądarkę czy stronę :)

Zrobienie tego w HTML w dzisiejszych czasach to trochę jakbyś chciał program pisać w ASM
1. Proponuję rozważyć ASP.NET lub coś podobnego (nie wiem czy już coś nowszego powstało), zależy czy uznasz dodatkowy kod C# i elementy spoza zwykłych ram HTML/CSS/JS za zaletę czy wadę
2. Drugą opcją może być GWT od Google, czyli tworzysz GUI w Javie, a oprogramowanie generuje Ci z tego stronkę web (tj. generuje HTML, JS itd.) - o ile uznasz, że pisanie tego w Javie ma zalety

Pomysł z pisaniem aplikacji w C++ czy serwera - absolutnie... zajedziesz się pisząc coś co już istnieje, chyba że 20h/dobę nudzisz się i nie masz co ze sobą zrobić

Aha, jeśli ma to być stand-alone, to robienie tego jako Web (przeglądarka) zamiast Desktop moze się okazać błędem - klient będzie musiał mieć połączenie z netem i serwer, albo... Zresztą różnica jest raczej zrozumiała. Wtedy to co pisałem jest trudniejsze do przyjęcia (chyba że jest jakiś sprytny sposób, typu dodanie lokalnego malutkiego serwera dołączanego do klienta, napisanego np. w pythonie czy innym php)

Jeśli nie podejdą pierwsze dwa rozwiązania, to wymienione QML z Qt i ewentualnie WPF to też bardzo dobre pomysły, tylko w nich odchodzisz trochę od koncepcji HTML - w QML żeby zrobić coś zaawansowanego, czytasz dokumentację od panów z Qt, a żeby w czystym HTML zrobić coś ciekawego, szukasz (nazwijmy to) bibliotek składających się z CSS/JS - tak mi się wydaje, choć może to trochę odbierać od prawdy....

Zbliżone do takiego stand-alone może będzie aplikacja napisana w JS (lub pośrednio w JS, typu node.js czy może nawet GWT się do tego łapie?). Tylko JS może mieć problem z komunikowaniem się z warstwą logiki, którą powiedzmy napiszesz w innym miejscu..

BTW, jak tworzyli http://www.quakelive.com/ to raczej nie zadawali sobie pytania, czy trzeba będzie ruszać WebKita / robić swój port przeglądarki / serwera Web / etc.
Skoro da się zrobić grę 3D "w przeglądarce" bez dotykania się tych rzeczy, to myślę że Twój projekt też się da
(Chociaż patrząc na doświadczenie Rega, to powinien to wszystko wiedzieć :D)
« Ostatnia zmiana: Maj 16, 2014, 19:30:20 wysłana przez lethern »

Offline Interceptor

  • Użytkownik

# Maj 16, 2014, 18:56:46
Ja bym zrobil gui oparty na zwyklych kontrolkach windowsowych opartych na elementach graficznych  oraz napisal kilka wlasnych.

Jak juz chcesz miec gui oparte na stronce, to polecam wxWidgets+wxWebViewChromium.

Offline Xender

  • Użytkownik

# Maj 16, 2014, 19:14:45
Flash z Adobe Air.
ISHYGDDT.

Ja bym osadził kontrolkę, jeśli chodzi tylko o UI. Aczkolwiek to trochę bloat i tak.

Offline Khazad

  • Użytkownik

# Maj 16, 2014, 22:40:59
Ja realizowałem coś takiego na potrzeby odtwarzacza filmów online. .Net + wpf + awesomium
Prawie całe kodzenie w ten sposób miałem po stronie html i js.

Offline ArekBal

  • Użytkownik

# Maj 16, 2014, 23:06:55
Jak dla mnie to będzie zależeć co to jest... musisz coś więcej info dać.
No chyba że o taki quiz chodzi...

Jeśli to LOB to wtedy taki misz masz to b. dobry plan...

Jak gra to hmm... ciężko będzie jedno na drugim rysować. Wtedy lepiej własne coś czy jakieś CEGUI.

Jeśli ma ładnie wyglądać i się dobrze integrować z viewportami to musi być własne... albo scaleform...

flash + air to ja też bym podziękował lepiej już wtedy dot net...

Offline Xion

  • Redaktor
    • xion.log

  • +1
# Maj 17, 2014, 01:41:39
Cytuj
Chciałbym napisać aplikację desktopową dla Windows, która by miała interfejs użytkownika w postaci strony HTML lub czegoś podobnego, żeby łatwo można było zrobić ładne ramki, tabelki i cały jego wygląd. Jak najlepiej to zrealizować? Bez ograniczeń na język programowania.
Aplikacja desktopowa z interfejsem webowym to taki trochę ni pies, ni wydra. Jest wprawdzie jeden znany ostatnio precedens -- edytor Atom od GitHuba (http://atom.io) -- ale to okropna sklejka node.js i Chromium, w która waży kilkadziesiąt MB i w dodatku nawet nie jest przenośna (tylko OSX).

Żeby cokolwiek sensownego powiedzieć, musimy mieć trochę więcej informacji. Prawdopodobnie najbardziej znaczącą jest to jak bardzo rzeczona aplikacja powinna być w stanie mieszać w samym systemie operacyjnym. Istnieje bowiem szansa, że w ogóle nie potrzebujesz do tego aplikacji w tradycyjnym znaczeniu -- ani desktopowej, ani serwera HTTP -- bo wystarczy po prostu "apka webowa": HTML + CSS + kod w JS, wszystko działające lokalnie (protokół file://), z jednym plikiem index.html który to "uruchamia".

Takie rozwiązanie mogłoby chociażby "odczytywać" i "zapisywać" pliki poprzez zwykłe przeglądarkowe mechanizmy uploadu i downloadu, gdzie dane trafiałyby do i pobierane byłyby z kodu JS, bez dotykania HTTP (keywords: HTML5 FileReader API, biblioteka FileSaver.js). Dopiero jakieś rzeczywiście systemowe funkcje (odczyt/zapis Rejestru, dostęp do systemu plików na dysku, raw sockety, etc.) wymagałyby binarki działającej w systemie jako serwer HTTP, tj. swego rodzaju proxy:

    JavaScript -> AJAX -> serwer HTTP -> Windows API/.NET/etc.

Coś takiego jest oczywiście bardziej skomplikowana niż zwykły program dla Windows, więc przemyśl, czy "interfejs webowy" jest tego warty.

Offline Xender

  • Użytkownik

# Maj 17, 2014, 12:39:08
W sumie są jeszcze bindingi WebKita do Pythona (jeśli preferujesz ten język zamiast Javascript).

https://www.gnu.org/software/pythonwebkit/
https://wiki.python.org/moin/WebBrowserProgramming

Offline Liosan

  • Redaktor

# Maj 17, 2014, 13:32:00
Ja ostatnio używam w robocie CEFa - czyli Chromium Embedded Framework, fajna sprawa. Okienkowy program C++ (albo C# chyba?), osadzamy tam okno, pocimy się pocimy żeby po podłączać a potem działa :) Jak już działa to jest bez zarzutu, ma wydajny silnik renderowania i javascriptu.

Jeśli chcesz zobaczyć przykład użycia tego w praktyce, to Evolve używa właśnie CEFa do zrobienia "aplikacji desktopowej dla Windows, która by miała interfejs użytkownika w postaci strony HTML" :)

Liosan

Offline maro

  • Użytkownik

  • +1
# Maj 17, 2014, 15:14:21
Cytuj
sklejka node.js i Chromium

Taka sklejka nosi nazwę node-webkit ( https://github.com/rogerwang/node-webkit ), i tak jak pisze Xion, dystrybucja na jedną platformę waży ok 50MB (cały silnik przeglądarki w jednym pliku).
Tworzymy plik HTML + jakiś manifest, i w zasadzie mamy gotową apkę, gdzie skrypty JS (nawet te osadzone w html-u) mają takie sam dostęp do systemu jak w node.js.
« Ostatnia zmiana: Maj 17, 2014, 15:16:14 wysłana przez maro »

Offline Xion

  • Redaktor
    • xion.log

# Maj 17, 2014, 15:47:41
@up: Wycofuję wcześniejsze stwierdzenie o okropności -- to w sumie całkiem sensowny pomysł :) Gdyby jeszcze rzecz była równie popularna jak JVM albo chociaż .NET CLR, to mielibyśmy kolejną dobrą platformę dla przenośnych apek desktopowych.

Offline Xender

  • Użytkownik

  • +1
# Maj 17, 2014, 16:03:22
.NET CLR
przenośnych
?!

Mono to chyba trochę proteza...

I co jest nieprzenośnego w innych językach, jeśli dostępne są wieloplatformowe biblioteki?
Czy crosskompilacja to jakaś inżynieria kosmiczna?

Co jest nieprzenośne w językach skryptowych, jak Python?
Bo Javascript, w którym pisze się w tym node-webkit jest zdecydowanie językiem skryptowym, więc jak już je uwzględniamy, to wszystkie.
« Ostatnia zmiana: Maj 17, 2014, 16:08:34 wysłana przez Xender »

Offline ArekBal

  • Użytkownik

# Maj 17, 2014, 17:25:52
Cytuj
Cytat: Xion w Dzisiaj o 13:47:41

    .NET CLR
    przenośnych

?!

Cytuj
chyba trochę
Xender: "chyba trochę" wiesz, a HOMO BOLDEM rzucasz ;)

Python nie ma takiej popularności jak byśmy sobie tutaj życzyli(niektórzy by sobie życzyli by Haskell jedynym językiem był), więc zluzuj. :)