JSc - JavaScript in Purebasic

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
Kirito
Beiträge: 11
Registriert: 23.01.2018 13:54

JSc - JavaScript in Purebasic

Beitrag von Kirito »

Hallo zusammen! Dies ist mein erster Post hier, daher stelle ich mich eben kurz vor.
Ich bin 24 Jahre alt und PureBasic ist die erste Sprache in der ich je programmiert
habe (ich denke ich war 12 als ich angefangen habe :mrgreen:) Mittlerweile
programmiere ich beruflich und bin mit vielen anderen Sprachen vertraut geworden,
dennoch greife ich immer wieder gerne auf PureBasic zurück, weil die Sprache,
wie soll man sagen ... naja ... einfach schön/simpel und schnell ist :)

So nun zum Wesentlichen: Ich habe meine Festplatte etwas aufgeräumt und dabei
meine alte Anbindung von JS in PureBasic gefunden. Das ganze läuft über Webgadgets,
die auf einem unsichtbaren Fenster erstellt werden. Man schreibt sein "Script", welches
dann (mit injizierten Funktionen für Rückgabe oder Erfassung neuer Parameter) ausgeführt
wird. Die Parameter/Returns sind im JSON-Format, daher kann man mehrere übergeben.

Im Wesentlichen ist alles (hoffentlich) schlüssig, aber kurz zu dieser Funktion:

Code: Alles auswählen

JSc_Script(Name$, Script$, ParamIn$, RunOnce.l=1, jq.b=0)
RunOnce: Bei 1 wird der Code einmalig ausgeführt und ist dann 'Ready'
- Bei 0 läuft der Code weiter!
- Es gibt noch Spielerein die nicht getestet worden sind:
Bei -1: Wird der Code erneut ausgeführt.
Bei -2: Ebenfalls, aber die Startparameter sind die Ausgangsparameter.

JQ: Soll JQ injiziert werden 0/1.


Download: http://www.mediafire.com/file/uzls8jpyn ... mpiler.zip (Includes mit Beispielcode)

BeispielCode:

Code: Alles auswählen

; Library for simple usage of JS-Scripts in PureBasic

  IncludeFile "_Init.pb"
  IncludeFile "_IDLE.pb"
  
;::::::::::::::::::::::::::::::::::::::::::::::::::::
  
  
  ;ScriptA with JQuery in it
  ScriptA$ = "var x=$('body');"
  ScriptA$ + "x.addClass('testClass');"
  ScriptA$ + "jsc_return(x.attr('class'));"
  
  ;ScriptB with simple use of arguments, Math and Strings
  ScriptB$ = "var x= args.name + 5*3*213*5.4+'_2secondscript_test2';"
  ScriptB$ + "jsc_return(x);"
  
  ;ScriptC with counter
  ScriptC$ = "window.setInterval('args.count++;" ;Every 300 secs new Output
  ScriptC$ + "jsc_return(args.count)',300);"
  
  ;ScriptD with Prompt and User-Data
  ScriptD$ = "jsc_return(prompt('Get from User','Default'));"
  
  ;Register Scripts
  JSc_Script("script_a", ScriptA$, "{'name':'test'}",1,1)
  JSc_Script("script_b", ScriptB$, "{'name':'test'}")
  JSc_Script("script_c", ScriptC$, "{'count':0}", 0)
  JSc_Script("script_d", ScriptD$, "{}")
  
  ;Run Scripts
  OpenConsole("JSC")

  While JSc_Script_Ready("script_a") <> 1 Or JSc_Script_Ready("script_b") <> 1  Or Val(JSc_Script_Out("script_c")) < 5
    JSc_IDLE()
    Delay(1)
    
    PrintN("a: "+JSc_Script_Out("script_a"))
    PrintN("b: "+JSc_Script_Out("script_b"))
    PrintN("c: "+JSc_Script_Out("script_c"))
    PrintN("d: "+JSc_Script_Out("script_d"))
    PrintN("======")
  Wend 

  
  ;Get Final-Results
  MessageRequester("Out", JSc_Script_Out("script_a")) ;Returns are in JSON_Format
  MessageRequester("Out", JSc_Script_Out("script_b"))
  MessageRequester("Out", JSc_Script_Out("script_c"))
  MessageRequester("Out", JSc_Script_Out("script_d"))

Das Projekt war eine kleine Spielerei, daher auch kaum dokumentiert und letztendlich bin ich auf eine andere Lösung umgestiegen -
aber eventuell hilft das ja dem ein oder anderen beim Aufbau seiner eigenen Anbindung.
Dementsprechend wird der Code auch (von mir) nicht geupdated, aber wer das weiterentwickeln möchte, darf das gerne machen :)

So damit genug für's Erste, viel Spaß beim Testen/Entwickeln und schönen Tag noch!

Mfg,
Kirito
~ Lately, there are days I can’t even remember the other world.