Webgadget: Klicks auf Buttons auswerten
- NicTheQuick
- Ein Admin
- Beiträge: 8807
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Webgadget: Klicks auf Buttons auswerten
Wie schon in einem anderen Thread erwähnt, geht das WebGadget bei mir gar nicht.
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Webgadget: Klicks auf Buttons auswerten
Das geht leider auch nicht.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: Webgadget: Klicks auf Buttons auswerten
danke Kiffi 
schöner Workaround
Warum klappt es auf !Windows nicht? Woran liegt es? WebGadgt-Hilfeseite sagt 'Unterstützte OS Alle' und auf 'Überblick über Betriebssystemabhängige Befehle' ist auch nicht aufgelistet.

schöner Workaround

Warum klappt es auf !Windows nicht? Woran liegt es? WebGadgt-Hilfeseite sagt 'Unterstützte OS Alle' und auf 'Überblick über Betriebssystemabhängige Befehle' ist auch nicht aufgelistet.
Ich benutze Pure Basic 5.30 auf Microsoft Windows 7.
Gruß
JM
Gruß
JM
Re: Webgadget: Klicks auf Buttons auswerten
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.![]()
Zuletzt geändert von Shardik am 06.05.2015 15:15, insgesamt 4-mal geändert.
- NicTheQuick
- Ein Admin
- Beiträge: 8807
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Webgadget: Klicks auf Buttons auswerten
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.![]()
Re: Webgadget: Klicks auf Buttons auswerten
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
Re: Webgadget: Klicks auf Buttons auswerten
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.![]()
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Webgadget: Klicks auf Buttons auswerten
läuft bei mir auch, ohne Probleme!
folgendes sollte installiert sein:
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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: Webgadget: Klicks auf Buttons auswerten
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
Bei Verwendung des WebGadget unter dem von PureBasic standardmäßig verwendeten Gtk2 sind nur die Bibliotheken libwebkitgtk-1.0-0 und libwebkitgtk-1.0-common nötig, wobei libwebkitgtk-1.0-common als essentielle Abhängigkeit bei der Installation von libwebkitgtk-1.0-0 immer auf entsprechende Nachfrage mitinstalliert wird (wird diese Nachfrage abgelehnt, so wird die Installation wegen der fehlenden Abhängigkeit verweigert!). Auf fast allen neueren Linux-Distributionen sind die 3er Versionen von libwebkitgtk standardmäßig installiert.
libwebkitgtk-dev ist nur nötig, wenn man die Kurzform
Code: Alles auswählen
ImportC "-lwebkitgtk-1.0"
Die 3er Versionen von libwebkitgtk sind für Gtk2 nicht nötig. Sie werden nur benötigt, wenn man Gtk3 verwenden möchte (Compiler/Compiler-Optionen.../Library Subsystem: gtk3). Mein obiges Linux-Beispiel funktioniert bei mir problemlos unter Ubuntu 14.04 x64 auch mit Gtk3, wenn ich die Import-Zeile für libwebkitgtk folgendermaßen abändere:
Code: Alles auswählen
ImportC "/usr/lib/x86_64-linux-gnu/libwebkitgtk-3.0.so.0"
Code: Alles auswählen
ImportC "-lwebkitgtk-3.0"
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Webgadget: Klicks auf Buttons auswerten
Damit es unter Linux auch im Unicode-Modus funktioniert ist folgendes zu ändern:
sowie:
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)
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
