Seite 1 von 2

Spiderbasic Proceduren mit PureBasic ausführen

Verfasst: 18.09.2024 15:07
von dige
Hallo,

irgendwie bekomme ich die neuen Webgadget / WebViewGadget Möglichkeiten nicht verdaut.

Mir scheint, dass das vor allem der Aspekt: mit Javascript von der Webseite aus, auf Purebasic Prozeduren zuzugreifen etabliert wurde.
Vermutlich um Purebasic um eine schicke moderne Oberfläche mit Webtechnologie zu erweitern.

Was ich allerdings möchte - das ging bisher mit dem alten IE WebGadget() und COMate - auf einer vorhandenen externen
Webseite Javascript Funktionen aufzurufen. Damit bspw. auf einer OSM Karten Webseite, ein Marker an einer bestimmten
Position hinzugefügt wird.

Von Kiffi habe dazu schon etwas gesehen:
https://www.purebasic.fr/english/viewto ... 68#p625468

Mir verknotet es da aber meine Hirnwindungen. Der Code scheint Javascript im DOM hinzuzufügen und PureBasic Code
mit der Webseite zu verbinden, die dann Purebasic Code ausführt, der wiederum Javascript ausführt :?

Ich kapiers nicht :(

Was ist denn der einfachste Weg, mittels Purebasic in einer im Webgadget geladenen Webseite eine Javascript Funktion aufzurufen?



Ich habe dazu auch eine Anfrage im englischen Forum gestartet. Befürchte aber mich da mit meinem schlechten englisch nicht klar ausgedrückt zu haben :freak: : https://www.purebasic.fr/english/viewtopic.php?t=85373

Re: Spiderbasic Proceduren mit PureBasic ausführen

Verfasst: 18.09.2024 15:26
von Kiffi
dige hat geschrieben: 18.09.2024 15:07Was ist denn der einfachste Weg, mittels Purebasic in einer im Webgadget geladenen Webseite eine Javascript Funktion aufzurufen?
mit WebViewExecuteScript()?

Re: Spiderbasic Proceduren mit PureBasic ausführen

Verfasst: 18.09.2024 15:53
von dige
Danke Kiffi.

Ich habe dazu nochmal recherchiert - jetzt funktioniert es. Ich hatte den Javascript Befehl nicht korrekt formuliert.

Wenn ich nun etwas an PureBasic zurück senden möchte, bspw. das Ergebnis des Funktionsaufrufes,
(das ging mal ganz einfach mit Pb2Web und cP2W.ExternalRaiseEvent())
dann muss ich eine Purebasic Procedure erstellen und mittels BindWebViewCallback() verbinden, die ich dann von Javascript aus ausrufe, richtig?

Was mache, wenn ich die Webseite / das Html nicht anpassen kann. Wie komme ich dann an den Return Wert?

Re: Spiderbasic Proceduren mit PureBasic ausführen

Verfasst: 18.09.2024 16:51
von Kiffi
dige hat geschrieben: 18.09.2024 15:53Wenn ich nun etwas an PureBasic zurück senden möchte, [...] dann muss ich eine Purebasic Procedure erstellen und mittels BindWebViewCallback() verbinden, die ich dann von Javascript aus ausrufe, richtig?
korrekt.
dige hat geschrieben: 18.09.2024 15:53Was mache, wenn ich die Webseite / das Html nicht anpassen kann. Wie komme ich dann an den Return Wert?
Da gibt es sicherlich Möglichkeiten, aber ohne die Webseite zu kennen, kann ich da keine konkrete Aussage machen.

Re: Spiderbasic Proceduren mit PureBasic ausführen

Verfasst: 18.09.2024 18:56
von dige
Hallo Kiffi,

beispielsweise hier: http://banano.tuebben.de/leaflet/demo/

wie kann ich da bei der "MarkerEvents - Demo" das Ergebnis vom Dragn drop des Markers ermitteln?

Re: Spiderbasic Proceduren mit PureBasic ausführen

Verfasst: 19.09.2024 11:33
von dige
Der nachfolgende Code fügt auf der Webseite einen neuen Marker hinzu und zentriere die Karte darauf.
Der Marker kann verschoben werden. Ist es irgendwie möglich, das Ergebnis des Verschiebens (Geokoordinaten) abzufragen?
Bzw. was müsste da im Html Code hinzugefügt werden?

Oder wäre es besser, eine eigene Karte mit SpiderBasic aufzusetzen und dann über BindWebViewCallback() zu kommunizieren?
https://github.com/spiderbytes/Leaflet

So langsam geht mir ein Licht auf, aber die Lampe glimmt nur..

Code: Alles auswählen

OpenWindow(0, 100, 100, 1200, 800, "WebViewGadget JavaScript Ausführung", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
WebViewGadget(0, 10, 10, 1180, 750, #PB_WebView_Debug)

SetGadgetText(0, "https://docs.maptiler.com/leaflet/examples/default-marker/code/?key=5lu005ch1iT9mtSq5nZH")

MessageRequester( "Please wait", "until the map is fully rendered" )

JavaScript$ = "L.marker([51.051945201454586, 13.737140108489939], {draggable: true}).addTo(map);"
WebViewExecuteScript(0, JavaScript$)

JavaScript$ = "map.setView([51.051945201454586, 13.737140108489939], map.getZoom());"
WebViewExecuteScript(0, JavaScript$)

Repeat
  Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow

Re: Spiderbasic Proceduren mit PureBasic ausführen

Verfasst: 19.09.2024 12:20
von Kiffi
dige hat geschrieben: 19.09.2024 11:33Bzw. was müsste da im Html Code hinzugefügt werden?
hier mal exemplarisch für das Klick-Event des Markers:

Code: Alles auswählen

JavaScript$ = "var myMarker = L.marker([51.051945201454586, 13.737140108489939], {draggable: true}).addTo(map);"
JavaScript$ + "myMarker.on('click', (event) => { alert('myMarkerClick'); });"

Re: Spiderbasic Proceduren mit PureBasic ausführen

Verfasst: 29.09.2024 17:47
von dige
Danke Kiffi. Ich kapiers leider immer noch nicht 🙈🥹

Ich sehe, dass ich per WebViewExecuteScript() den Klick auf den Marker als Messagebox in der Karte angezeigt bekomme.
Das bringt mich aber noch nicht weiter, da ich die Informationen zu dem Marker in der PB Umgebung benötige.

Vermutlich muss dann statt alert('myMarkerClick'); ein Aufruf einer eigenen Javascript Funktion erfolgen?
Diese Funktion, bzw. deren Namen muss ich mit BindWebViewCallback() mit einer Purebasic Funktion verknüpfen...ist das richtig?

Nochmal konkret zu einem alten Pb2Web Projekt:

Auf der Seite: https://www.dbsthumb.de/livemap/index2.html habe ich eine Google Maps Karte, die ExternalRaiseEvent() aufruft,
um Daten zu übergeben. Wenn ich den Marker aber bewegt, erhalte ich die Infos über den Callback nicht.

Was mache ich falsch?

Code: Alles auswählen

  Procedure ExternalRaiseEvent(JsonParameters$)
    Debug JsonParameters$
  EndProcedure

  
  OpenWindow(0, 100, 100, 400, 400, "Google Map Test", #PB_Window_SystemMenu)

  WebViewGadget(0, 0, 0, 400, 400)
  SetGadgetText(0, "https://www.dbsthumb.de/livemap/index2.html")
  
  MessageRequester( "Warte auf Karte", "Ok wenn fertig")
  
  BindWebViewCallback(0, "ExternalRaiseEvent", @ExternalRaiseEvent())
  
  WebViewExecuteScript(0, "GoogleMapAddPin(0, 51.0275764465, 13.7329101563, 1, 1);")
  

  Repeat 
    Event = WaitWindowEvent()
  Until Event = #PB_Event_CloseWindow

Re: Spiderbasic Proceduren mit PureBasic ausführen

Verfasst: 29.09.2024 18:40
von Kiffi
ähm, welche Map denn nu? Leaflet oder Google?

Re: Spiderbasic Proceduren mit PureBasic ausführen

Verfasst: 29.09.2024 18:47
von dige
Google pls