BBjHtmlView::executeAsyncScript

Description

In BBj 19.10 and higher, this method executes the specified JavaScript in this BBjHtmlView control and returns immediately. In BBj 22.14 and higher, the return value is an integer index that will be included in a subsequent BBjExecuteScriptEvent.

Syntax

Return Value Method
int executeAsyncScript(String script)
int executeAsyncScript(String script, boolean await)
int executeAsyncScript(String script, boolean await, boolean event)

Parameters

Parameter Description
script JavaScript to be executed in this BBjHtmlView.
await In BBj 23.04 and higher, this optional boolean value specifies that the DWC client should execute this script using the JavaScript await operator. If not specified, the default is false (0).
event In BBj 24.11 and higher, this optional boolean value specifies that this script's result should be reported in a subsequent BBjExecuteScriptEvent. If not specified, the default is true (1).

Return Value

In BBj 22.14 and higher, the return value is an integer index that will be included in a subsequent BBjExecuteScriptEvent.

Example

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
	

ClosedVersion History

  • BBj 23.11: Added an optional event argument.
  • BBj 23.04: Added an optional await argument.
  • BBj 22.14: BBjHtmlView::executeAsyncScript now returns an index as an int.
  • BBj 19.10: BBjHtmlView::executeAsyncScript added.

See Also

BBjAPI

BBjSysGui

BBjControl

BBjWindow

See the BBj Object Diagram for an illustration of the relationship between BBj Objects.