Spiderbasic Proceduren mit PureBasic ausführen

Hier könnt ihr alle Fragen zu SpiderBasic austauschen.
Benutzeravatar
dige
Beiträge: 1235
Registriert: 08.09.2004 08:53

Spiderbasic Proceduren mit PureBasic ausführen

Beitrag 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
"Papa, ich laufe schneller - dann ist es nicht so weit."
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Spiderbasic Proceduren mit PureBasic ausführen

Beitrag 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()?
a²+b²=mc²
Benutzeravatar
dige
Beiträge: 1235
Registriert: 08.09.2004 08:53

Re: Spiderbasic Proceduren mit PureBasic ausführen

Beitrag 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?
"Papa, ich laufe schneller - dann ist es nicht so weit."
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Spiderbasic Proceduren mit PureBasic ausführen

Beitrag 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.
a²+b²=mc²
Benutzeravatar
dige
Beiträge: 1235
Registriert: 08.09.2004 08:53

Re: Spiderbasic Proceduren mit PureBasic ausführen

Beitrag 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?
"Papa, ich laufe schneller - dann ist es nicht so weit."
Benutzeravatar
dige
Beiträge: 1235
Registriert: 08.09.2004 08:53

Re: Spiderbasic Proceduren mit PureBasic ausführen

Beitrag 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
"Papa, ich laufe schneller - dann ist es nicht so weit."
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Spiderbasic Proceduren mit PureBasic ausführen

Beitrag 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'); });"
a²+b²=mc²
Benutzeravatar
dige
Beiträge: 1235
Registriert: 08.09.2004 08:53

Re: Spiderbasic Proceduren mit PureBasic ausführen

Beitrag 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
"Papa, ich laufe schneller - dann ist es nicht so weit."
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Spiderbasic Proceduren mit PureBasic ausführen

Beitrag von Kiffi »

ähm, welche Map denn nu? Leaflet oder Google?
a²+b²=mc²
Benutzeravatar
dige
Beiträge: 1235
Registriert: 08.09.2004 08:53

Re: Spiderbasic Proceduren mit PureBasic ausführen

Beitrag von dige »

Google pls
"Papa, ich laufe schneller - dann ist es nicht so weit."
Antworten