Re: Webgadget: Klicks auf Buttons auswerten
Verfasst: 10.02.2015 23:15
Wie schon in einem anderen Thread erwähnt, geht das WebGadget bei mir gar nicht.
Das deutsche PureBasic-Forum
https://www.purebasic.fr/german/
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!"
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
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
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.![]()
Ja, das ist schon immer bei mir installiert. Und es hilft nichts.Shardik hat geschrieben: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.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.![]()
So geht es auch unter MacOS X...mk-soft hat geschrieben:Geht unter Mac auch nicht
Code: Alles auswählen
EnableExplicit
#NSLeftMouseUp = 2
Define CurrentEvent.I
Define DOMNode.I
Define ElementDictionary.I
Define EventType.I
Define IDName.S
Define Point.NSPoint
Define SharedApplication = CocoaMessage(0, 0, "NSApplication sharedApplication")
Define HTML.S
OpenWindow(0, 270, 100, 270, 50, "HTML-Formular")
WebGadget(0, 5, 5, WindowWidth(0) - 10, WindowHeight(0) - 10, "")
; ----- HTML-Formular mit Anzeige von 2 Buttons
HTML = "<html>" +
"<body>" +
"<input type='button' value='Klick mich!' id='Button1'>" +
"<input type='button' value='Nein, lieber mich!' id='Button2'>" +
"</body>" +
"</html>"
; ----- HTML-Formular ins WebGadget laden und anzeigen
CocoaMessage(0, CocoaMessage(0, GadgetID(0), "mainFrame"),
"loadHTMLString:$", @HTML,
"baseURL:", 0)
Repeat
CurrentEvent = CocoaMessage(0, SharedApplication, "currentEvent")
If CurrentEvent
EventType = CocoaMessage(0, CurrentEvent, "type")
If EventType = #NSLeftMouseUp
; ----- Ermittle Mausklick-Position
CocoaMessage(@Point, CurrentEvent, "locationInWindow")
; ----- Infos über HTML-Element an Mausklick-Position anfordern
CocoaMessage(@ElementDictionary, GadgetID(0),
"elementAtPoint:@", @Point)
; ----- DOMNode ermitteln
DOMNode = CocoaMessage(0, ElementDictionary,
"objectForKey:$", @"WebElementDOMNode")
If DOMNode
IDName = PeekS(CocoaMessage(0, CocoaMessage(0, DOMNode, "idName"),
"UTF8String"), -1, #PB_UTF8)
If Left(IDName, 6) = "Button"
Debug "Linksklick auf " + IDName
EndIf
EndIf
EndIf
EndIf
Until WaitWindowEvent() = #PB_Event_CloseWindow
Ich kann leider Dein Problem nicht reproduzieren. Bei mir läuft das WebGadget einwandfrei unter Ubuntu 14.04 x86 und x64 mit Unity und im Übrigen auch unter 20 anderen Linux-Distributionen (u.a. Debian 7 und Fedora 20 mit Gnome 3), wenn die Bibliothek libwebkitgtk-1.0-0 vorhanden ist...NicTheQuick hat geschrieben:Ja, das ist schon immer bei mir installiert. Und es hilft nichts.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.![]()
Code: Alles auswählen
libwebkitgtk-1.0-0
libwebkitgtk-1.0-common
libwebkitgtk-3.0-0
libwebkitgtk-3.0-common
libwebkitgtk-dev
Eine genauere Erklärung:ts-soft hat geschrieben:folgendes sollte installiert sein:Code: Alles auswählen
libwebkitgtk-1.0-0 libwebkitgtk-1.0-common libwebkitgtk-3.0-0 libwebkitgtk-3.0-common libwebkitgtk-dev
Code: Alles auswählen
ImportC "-lwebkitgtk-1.0"
Code: Alles auswählen
ImportC "/usr/lib/x86_64-linux-gnu/libwebkitgtk-3.0.so.0"
Code: Alles auswählen
ImportC "-lwebkitgtk-3.0"
Code: Alles auswählen
ImportC "-lwebkitgtk-1.0"
webkit_web_settings_new()
webkit_web_view_load_string(*WebView, Content.p-utf8, *MIMEType, *Encoding, *BaseURI)
Code: Alles auswählen
webkit_web_view_load_string(GadgetID(0), HTML, 0, 0, 0)