Re: Webgadget: Klicks auf Buttons auswerten
Verfasst: 11.02.2015 15:16
Ein Blick in die PureBasic-Hilfe zeigt, dass folgende WebGadget-Features (leider die meisten!) für Linux und MacOS nicht zur Verfügung stehen:NicTheQuick hat geschrieben:So ist das bei PB die letzte Zeit immer öfter.ts-soft hat geschrieben:funktioniert leider nur unter Windows![]()
also doch javascript.
"Plattformunabhängigkeit? Nein, Danke!"
- SetGadgetItemText() mit #PB_Web_HtmlCode
- GetGadgetItemText() mit den Attributen #PB_Web_HtmlCode, #PB_Web_PageTitle, #PB_Web_StatusMessage und #PB_Web_SelectedText
- SetGadgetAttribute() mit den Attributen #PB_Web_ScrollX, #PB_Web_ScrollY, #PB_Web_BlockPopups, #PB_EventType_PopupWindow, #PB_Web_BlockPopupMenu, #PB_EventType_PopupMenu und #PB_Web_NavigationCallback
- GetGadgetAttribute() mit den Attributen #PB_Web_ScrollX, #PB_Web_ScrollY, #PB_Web_Busy, #PB_Web_Progress, #PB_EventType_DownloadProgress, #PB_Web_ProgressMax, #PB_Web_BlockPopups, #PB_Web_BlockPopupMenu und #PB_Web_NavigationCallback
Außerdem stehen folgende Ereignistypen nicht zur Verfügung:
- #PB_EventType_TitleChange
- #PB_EventType_StatusChange
- #PB_EventType_DownloadStart (nur unter Linux nicht)
- #PB_EventType_DownloadProgress
- #PB_EventType_DownloadEnd (nur unter Linux nicht)
- #PB_EventType_PopupWindow
- #PB_EventType_PopupMenu
Es hat aber möglicherweise auch einen Grund, weshalb viele WebGadget-Funktionen unter Linux und MacOS (noch?) nicht verfügbar sind, denn ich habe ziemlich lange gebraucht, um Kiffis Beispiel unter Linux mit WebKitGtk zum Laufen zu bringen. Und dies auch nur mit einem Trick, indem ich per Javascript bei einem Button-Klick einen Alert produziere, den ich in WebKitGtk abfangen kann. So ähnlich sollte dies übrigens auch unter MacOS funktionieren...

Im englischen Forum hatte ich übrigens auch schon einmal in diesem Feature Request vorgeschlagen, zumindest den NavigationCallback() in Linux und MacOS zu implementieren und auch gleich Beispiel-Codes gezeigt, mit dem das Beispiel aus der PureBasic-Hilfe (Abfangen eines Klicks auf einen Hyperlink) auch unter Linux und MacOS läuft. Aber während sich das Abfangen eines Klicks auf einen Hyperlink einfach realisieren läßt, ist dies bei Aktionen wie bei einem Button-Klick viel komplizierter...
Ergänzungen: Sollte die Fehlermeldung
ausgegeben werden, dann wurde die Bibliothek libwebkitgtk-1.0 nicht gefunden. Es gibt dafür zwei Lösungsmöglichkeiten:PureBasic - Linker error hat geschrieben:/usr/bin/ld: cannot find -lwebkitgtk-1.0
collect2: ld gab 1 als Ende-Status zurück
Entweder die Bibliothek libwebkitgtk-dev zusätzlich installieren
oder den kompletten Pfad zur libwebkitgtk angeben:
Für Ubuntu 12.04:
Code: Alles auswählen
ImportC "/usr/lib/libwebkitgtk-1.0.so.0"
Code: Alles auswählen
ImportC "/usr/lib/i386-linux-gnu/libwebkitgtk-1.0.so.0"
Diese angeblich von WebKitGtk stammenden Warnungen erhalte ich nur in Ubuntu 14.04 x86 und x64 mit Unity unter PB 5.31. Beim ersten Programmstart kann es sein, dass das Programm dann hängt und mit dem Totenkopf-Symbol (Programm beenden) abgebrochen werden muß. Ein zweiter und weitere Starts laufen dann meist problemlos (trotz der Warnungen) durch.[WARNING] DEBUG: NP_Inititialize
[WARNING] ExampleCode.pb (Zeile 18)
[WARNING] DEBUG: NP_Inititialize succeeded
Bei diesen Linux-Distributionen erscheinen die Warnungen nicht:
- Kubuntu 14.04 x86 mit KDE
- Ubuntu 12.04 x86 mit Unity
- Xubuntu 14.04 x86 mit Xfce
Code: Alles auswählen
ImportC "-lgobject-2.0"
g_signal_connect_data(*Instance, Signal.P-UTF8, *Callback, *UserData, *ClosureNotify, ConnectFlags.I)
EndImport
ImportC "-lwebkitgtk-1.0"
webkit_web_settings_new()
webkit_web_view_load_string(*WebView, Content.P-UTF8, *MIMEType, *Encoding, *BaseURI)
webkit_web_view_set_settings(*WebkitWebView, *WebkitSettings)
EndImport
ProcedureC WebGadgetCallback(*WebView, *Frame, *Message, UserData)
MessageRequester("Info", "Button " + Mid(PeekS(*Message, -1, #PB_UTF8), 7, 1) + " wurde ausgewählt!")
; ----- Verhindere das Öffnen eines JavaScript-Fensters
ProcedureReturn #True
EndProcedure
OpenWindow(0, 0, 0, 270, 60, "WebGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
WebGadget(0, 5, 5, WindowWidth(0) - 10, WindowHeight(0) - 10, "")
HTML.s = "<html>" +
"<head>" +
"<script type='text/javascript'>" +
"function Button1Click() { alert('Button1Click'); }" +
"function Button2Click() { alert('Button2Click'); }" +
"</script>" +
"</head>" +
"<body>" +
"<input type='button' value='Klick mich!' onClick='alert(" + #DQUOTE$ + "Button1Click()" + #DQUOTE$ + ")'>" +
"<input type='button' value='Nein, lieber mich!' onClick='alert(" + #DQUOTE$ + "Button2Click()" + #DQUOTE$ + ")'>" +
"</body>" +
"</html>"
webkit_web_view_load_string(GadgetID(0), HTML, 0, 0, 0)
g_signal_connect_data(GadgetID(0), "script-alert", @WebGadgetCallback(), 0, 0, 0)
WebkitSettings = webkit_web_settings_new()
webkit_web_view_set_settings(GadgetID(0), WebkitSettings)
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
Hast Du in dem von Dir angesprochenen Thread die Empfehlung vom mir ausprobiert und libwebkitgtk-1.0-0 installiert?NicTheQuick hat geschrieben:Wie schon in einem anderen Thread erwähnt, geht das WebGadget bei mir gar nicht.
Update: Ich habe das Beispiel - wie im Posting weiter unten von ts-soft empfohlen - so abgeändert, dass es auch im Unicode-Modus läuft. Vielen Dank für Deinen Hinweis, Thomas!Shardik hat geschrieben:Du hast wahrscheinlich nicht die für GTK2 notwendige Bibliothek libwebkitgtk-1.0-0 installiert. In neueren Distributionen ist nur noch die neuere Bibliothek libwebkitgtk-3.0-0 für GTK3 vorinstalliert...NicTheQuick hat geschrieben:Bei mir unter Ubuntu 14.04 x64 geht das WebGadget gar nicht erst, d.h. der Debugger bleibt in der Zeile mit dem WebGadget einfach stehen und ich muss das Programm abschießen.![]()