rem ' BBjHtmlView::executeAsyncScript
web = info(3,6)="5" or info(3,6)="6"
sysgui = unt
open (sysgui)"X0"
sysgui! = bbjapi().getSysGui()
window! = sysgui!.addWindow(25,25,300,500,"executeAsyncScript",$00090083$)
window!.setCallback(window!.ON_CLOSE,"eoj")
gosub makehtml
htmlview! = window!.addHtmlView(101,25,25,250,150,html$,$$)
htmlview!.setCallback(htmlview!.ON_PAGE_LOADED,"pageloaded")
htmlview!.injectScript("function doAlert() { console.log(alert('Alert dialog')); }",1)
htmlview!.injectScript("function doConfirm() { console.log(confirm('Confirm dialog')); }",1)
htmlview!.injectScript("function doPrompt() { console.log(prompt('Prompt dialog')); }",1)
alert! = window!.addButton(102,25,200,250,25,"alert",$$)
alert!.setCallback(alert!.ON_BUTTON_PUSH,"alert")
confirm! = window!.addButton(103,25,250,250,25,"confirm",$$)
confirm!.setCallback(alert!.ON_BUTTON_PUSH,"confirm")
prompt! = window!.addButton(104,25,300,250,25,"prompt",$$)
prompt!.setCallback(prompt!.ON_BUTTON_PUSH,"prompt")
backgroundColor! = window!.addButton(105,25,350,250,25,"backgroundColor",$$)
backgroundColor!.setCallback(backgroundColor!.ON_BUTTON_PUSH,"backgroundColor")
samples! = window!.addButton(2,25,400,250,25,"Samples",$$)
samples!.setCallback(samples!.ON_BUTTON_PUSH,"samples")
restore 0
sample$ = ""
if web then body$ = "" else body$ = "document.body."
while 1
dread js$,end=*break
sample$ = sample$ + js$ + $0a$
wend
sample! = window!.addListButton(3,25,450,250,450,sample$,$$)
sample!.setCallback(sample!.ON_LIST_SELECT,"sample")
status! = window!.addStatusBar(99)
htmlview!.setCallback(htmlview!.ON_GAINED_FOCUS,"event")
htmlview!.setCallback(htmlview!.ON_LOST_FOCUS,"event")
htmlview!.setCallback(htmlview!.ON_MOUSE_ENTER,"event")
htmlview!.setCallback(htmlview!.ON_MOUSE_EXIT,"event")
htmlview!.setCallback(htmlview!.ON_NATIVE_JAVASCRIPT,"event")
htmlview!.setCallback(htmlview!.ON_EXECUTE_SCRIPT,"executeScript")
print "getClientType: ",htmlview!.getClientType(err=*next)
print "getClientVersion: ",htmlview!.getClientVersion(err=*next)
process_events
eoj:
release
makehtml:
html$ = ""
html$ = html$ + "<!DOCTYPE html> <html> <body>"
html$ = html$ + "<br><button onclick='doAlert()'>Alert</button>"
html$ = html$ + "<br><button onclick='doConfirm()'>Confirm</button>"
html$ = html$ + "<br><button onclick='doPrompt()'>Prompt</button>"
html$ = html$ + "<script>"
html$ = html$ + "function doAlert() { console.log(alert('Alert dialog')); }"
html$ = html$ + "function doConfirm() { console.log(confirm('Confirm dialog')); }"
html$ = html$ + "function doPrompt() { console.log(prompt('Prompt dialog')); }"
html$ = html$ + "</script>"
html$ = html$ + "</body> </html>"
return
pageloaded:
event! = sysgui!.getLastEvent()
web! = bbjapi().getWebManager()
web!.setCallback(web!.ON_EXECUTE_SCRIPT,"executeScript",err=*next)
htmlview!.setCallback(htmlview!.ON_GAINED_FOCUS,"event")
htmlview!.setCallback(htmlview!.ON_LOST_FOCUS,"event")
htmlview!.setCallback(htmlview!.ON_MOUSE_ENTER,"event")
htmlview!.setCallback(htmlview!.ON_MOUSE_EXIT,"event")
i = msgbox(str(event!.getText()),32768,event!.getEventName())
return
alert:
js$ = "alert('alert')"
gosub executeAsyncScript
return
confirm:
js$ = "confirm('confirm')"
gosub executeAsyncScript
return
prompt:
js$ = "prompt('prompt')"
gosub executeAsyncScript
return
executeScript:
event! = sysgui!.getLastEvent()
result! = event!.getResult()
if result! = null() then result$ = "null" else result$ = result!.getClass().getName()+" "+result!.toString()
index = 0, index = event!.getIndex(err=*next)
msg$ = event!.getEventName()+" "+str(index)+" "+date(0:"%Hz:%mz:%sz.%tz %p")
msg$ = msg$ + " result="+result$+" script="+ event!.getScript()+" control="+str(event!.getControl())
print msg$
System.out.println(msg$)
status!.setText(msg$)
return
backgroundColor:
r = rnd(255), g = rnd(255), b = rnd(255)
rgb$ = "#"+hta(chr(r))+hta(chr(g))+hta(chr(b))
js$ = "document.body.style.backgroundColor = """+rgb$+""""
if web then js$ = "style.backgroundColor = """+rgb$+""""
gosub executeAsyncScript
return
executeAsyncScript:
index = htmlview!.executeAsyncScript(js$)
msg$ = "executeAsyncScript "+str(index)+" "+date(0:"%Hz:%mz:%sz.%tz %p")+": "+js$
print msg$
System.out.println(msg$)
return
sample:
event! = sysgui!.getLastEvent()
js$ = event!.getSelectedItem()
print event!.getEventName()," ",js$
gosub executeAsyncScript
return
samples:
restore 0
while 1
dread js$,end=*break
gosub executeAsyncScript
wend
return
event:
event! = sysgui!.getLastEvent()
event$ = event!.getEventName()
print event$
status!.setText(event$)
System.out.println(event$)
return
rem ' JavaScript Samples
data ""
data "Math.sqrt(100)"; rem ' Double or Integer 10
data "Math.sqrt(-1)"; rem ' Double NaN
data "document.hasFocus()"; rem ' Boolean false
data body$ + "style.backgroundColor"; rem ' String #ffff00
data "Math.PI"; rem ' Double 3.141592653589793
data "1/0"; rem ' Double Infinity
data "-1/0"; rem ' Double -Infinity
data "Number.MIN_SAFE_INTEGER"; rem ' Integer
data "Number.MAX_SAFE_INTEGER"; rem ' Integer
data "Number.MAX_VALUE"; rem '
data "0"; rem ' Integer
data "42"; rem ' Integer
data "2147483647"; rem ' Integer
data "2147483648"; rem ' Long
data "true"; rem ' Boolean true
data """true"""; rem ' String
data "false"; rem ' Boolean false
data """false"""; rem ' String
data """0"""; rem ' String
data """1"""; rem ' String
data """null"""; rem ' String
data "null"; rem ' null
data "undefined"; rem ' null
data "'The quick brown fox jumps over the lazy dog.'.split(' ')"; rem ' String[]
data "(function(){let map = new Map(); map.set('a', 1); map.set('b', 2); map.set('c', 3); return map;})();"; rem IIFE Map
|