
BBjBuiManager::executeAsyncScript
Description
In BBj 22.14 and higher, this method executes the specified JavaScript in this web page and returns immediately. The return value is an integer index that will be included in a subsequent BBjExecuteScriptEvent.
Syntax
Return Value |
Method |
---|---|
int |
executeAsyncScript(string script) |
Parameters
Variable | Description |
---|---|
script | JavaScript to be executed in this web page. |
Return Value
The return value is an integer index that will be included in a subsequent BBjExecuteScriptEvent.
Remarks
None.
Example
Copy
BBjBuiManager::executeAsyncScript Example
rem ' BBjBuiManager
declare BBjSysGui sysgui!
declare BBjBuiManager bui!
declare BBjBusyIndicator busy!
sysgui = unt
open (sysgui)"X0"
sysgui! = bbjapi().getSysGui()
bui! = bbjapi().getBuiManager()
bui!.setCallback(bui!.ON_BROWSER_CLOSE,"ON_BROWSER_CLOSE",err=*next)
bbjapi().getConfig().releaseOnLostConnection(0)
setesc ON_LOST_CONNECTION
url$ = "(Not BUI)"
url$ = bui!.getUrl(err=*next)
appName$ = " (Not BUI)"
appName$ = bui!.getApplicationName(err=*next)
title$ = "BBjBuiManager: " + appName$
touch = 0
touch = bui!.isTouchSupported(err=*next)
if touch then title$ = title$ + " (Touch)" else title$ = title$ + " (Not Touch)"
window! = sysgui!.addWindow(25,25,450,600,title$,$00090083$)
window!.setCallback(window!.ON_CLOSE,"eoj")
status! = window!.addStatusBar(999)
window!.addStaticText(99,25,25,400,25,"URL: "+url$,$$)
window!.addGroupBox(100,25,75,400,125,"End Actions")
endApp! = window!.addRadioButton(101,30,100,75,25,"App",$0020$)
endUrl! = window!.addRadioButton(102,105,100,75,25,"URL",$0020$)
endMsg! = window!.addRadioButton(103,180,100,75,25,"Msg",$0020$)
endNone! = window!.addRadioButton(104,255,100,75,25,"None",$0020$)
endDefault! = window!.addRadioButton(105,330,100,75,25,"Default",$0020$)
endGroup! = window!.addRadioGroup()
endGroup!.add(endApp!)
endGroup!.add(endUrl!)
endGroup!.add(endMsg!)
endGroup!.add(endNone!)
endGroup!.add(endDefault!)
window!.addStaticText(106,30,150,60,25,"Value:",$8000$)
endValue! = window!.addEditBox(107,100,150,225,25,$$)
setEndAction! = window!.addButton(108,340,150,75,25,"Set",$$)
setEndAction!.setCallback(setEndAction!.ON_BUTTON_PUSH,"setEndAction")
window!.addGroupBox(200,25,225,400,125,"Err Actions")
errApp! = window!.addRadioButton(201,30,250,75,25,"App",$0020$)
errUrl! = window!.addRadioButton(202,105,250,75,25,"URL",$0020$)
errMsg! = window!.addRadioButton(203,180,250,75,25,"Msg",$0020$)
errNone! = window!.addRadioButton(204,255,250,75,25,"None",$0020$)
errDefault! = window!.addRadioButton(205,330,250,75,25,"Default",$0020$)
errGroup! = window!.addRadioGroup()
errGroup!.add(errApp!)
errGroup!.add(errUrl!)
errGroup!.add(errMsg!)
errGroup!.add(errNone!)
errGroup!.add(errDefault!)
window!.addStaticText(206,30,300,60,25,"Value:",$8000$)
errValue! = window!.addEditBox(207,100,300,225,25,$$)
setErrAction! = window!.addButton(208,340,300,75,25,"Set",$$)
setErrAction!.setCallback(setEndAction!.ON_BUTTON_PUSH,"setErrAction")
title$ = "Show Confirm Close Dialog"
confirm = 0
confirm = bui!.getShowConfirmCloseDialog(err=*next)
flags$ = iff(confirm,$0004$,$0000$)
setShowConfirmDialog! = window!.addCheckBox(209,25,375,300,25,title$,flags$)
setShowConfirmDialog!.setCallback(setShowConfirmDialog!.ON_CHECK_ON,"showConfirmDialogOn")
setShowConfirmDialog!.setCallback(setShowConfirmDialog!.ON_CHECK_OFF,"showConfirmDialogOff")
showBusy! = window!.addButton(1,25,425,100,25,"Busy",$$)
showBusy!.setCallback(showBusy!.ON_BUTTON_PUSH,"showBusy")
busyMessage! = window!.addEditBox(300,150,425,275,25,"Working...",$$)
gosub fetch
rem ' https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/Date
js$ = "function toISOString(date){try{return new Date(date).toISOString()}catch(e){return new String(e)}}"
sysgui!.injectScript(js$)
toISOString! = window!.addButton(2,25,475,100,25,"toISOString",$$)
toISOString!.setCallback(toISOString!.ON_BUTTON_PUSH,"toISOString")
text$ = "December 25, " + date(0:"%Yl")
text! = window!.addEditBox(400,150,475,275,25,text$,$$)
bui!.setCallback(bui!.ON_EXECUTE_SCRIPT,"executeScript",err=*next)
executeAsyncScript! = window!.addButton(3,150,525,275,25,"executeAsyncScript",$$)
executeAsyncScript!.setCallback(executeAsyncScript!.ON_BUTTON_PUSH,"samples")
process_events
eoj:
release
toISOString:
text$ = text!.getText()
js$ = "toISOString('"+text$+"')"
t = tim
if info(3,6)="5" or info(3,6)="6" then
ISOString! = bui!.executeScript(js$)
else
ISOString! = sysgui!.executeScript(js$)
endif
t = tim - t, t = t * 3600 * 1000
msg$ = "executeScript " + js$ + " = " + str(ISOString!) + ": " + str(t) + " milliseconds."
status!.setText(msg$)
return
samples:
if web then body$ = "" else body$ = "document.body."
js$ = "console.log('executeAsyncScript')"; gosub executeAsyncScript; rem ' undefined
js$ = "Math.sqrt(100)"; gosub executeAsyncScript; rem ' Double or Integer 10
js$ = "Math.sqrt(-1)"; gosub executeAsyncScript; rem ' Double NaN
js$ = "null"; gosub executeAsyncScript; rem ' null
js$ = "undefined"; gosub executeAsyncScript; rem ' null
js$ = "document.hasFocus()"; gosub executeAsyncScript; rem ' Boolean false
js$ = body$ + "style.backgroundColor"; gosub executeAsyncScript; rem ' String #ffff00
js$ = "Math.PI"; gosub executeAsyncScript; rem ' Double 3.141592653589793
js$ = "1/0"; gosub executeAsyncScript; rem ' Double Infinity
js$ = "-1/0"; gosub executeAsyncScript; rem ' Double -Infinity
js$ = "Number.MIN_SAFE_INTEGER"; gosub executeAsyncScript; rem '
js$ = "Number.MAX_SAFE_INTEGER"; gosub executeAsyncScript; rem '
js$ = "Number.MAX_VALUE"; gosub executeAsyncScript; rem '
js$ = "0"; gosub executeAsyncScript; rem ' Integer
js$ = "42"; gosub executeAsyncScript; rem ' Integer
js$ = "2147483647"; gosub executeAsyncScript; rem ' Integer
js$ = "2147483648"; gosub executeAsyncScript; rem ' Long
js$ = """true"""; gosub executeAsyncScript; rem ' String
js$ = """false"""; gosub executeAsyncScript; rem ' String
js$ = """0"""; gosub executeAsyncScript; rem ' String
js$ = """1"""; gosub executeAsyncScript; rem ' String
js$ = """null"""; gosub executeAsyncScript; rem ' String
js$ = "null"; gosub executeAsyncScript; rem ' null
js$ = "undefined"; gosub executeAsyncScript; rem ' null
return
executeAsyncScript:
t = tim
if info(3,6)="5" or info(3,6)="6" then
index! = bui!.executeAsyncScript(js$)
else
index! = sysgui!.executeAsyncScript(js$)
endif
index = 0; if index!<>null() then index = num(index!)
t = tim - t, t = t * 3600 * 1000
System.err.println("executeAsyncScript " + str(index) + " " + js$ + ": " + str(t) + " milliseconds.")
return
executeScript:
event! = sysgui!.getLastEvent()
index = 0, index = event!.getIndex(err=*next)
result! = event!.getResult()
if result! = null() then result$ = "null" else result$ = result!.getClass().getName()+" "+result!.toString()
msg$ = event!.getEventName()+" "+str(index)+" "+date(0:"%Hz:%mz:%sz.%tz %p")
msg$ = msg$ + " result = " + result$ + " script = " + event!.getScript()
print msg$
System.err.println(msg$)
i = msgbox(msg$,0,event!.getEventName())
return
fetch:
endAction! = bui!.getEndAction(err=*return)
switch endAction!.getActionType()
case endAction!.ACTION_APP
endApp!.setSelected(1)
endValue!.setText(endAction!.getAppName())
break
case endAction!.ACTION_URL
endUrl!.setSelected(1)
endValue!.setText(endAction!.getUrl())
break
case endAction!.ACTION_MSG
endMsg!.setSelected(1)
endValue!.setText(endAction!.getMessage())
break
case endAction!.ACTION_NONE
endNone!.setSelected(1)
endValue!.setText("")
break
case endAction!.ACTION_DEFAULT
endDefault!.setSelected(1)
endValue!.setText("")
break
swend
errAction! = bui!.getErrAction(err=*return)
switch errAction!.getActionType()
case errAction!.ACTION_APP
errApp!.setSelected(1)
errValue!.setText(errAction!.getAppName())
break
case errAction!.ACTION_URL
errUrl!.setSelected(1)
errValue!.setText(errAction!.getUrl())
break
case errAction!.ACTION_MSG
errMsg!.setSelected(1)
errValue!.setText(errAction!.getMessage())
break
case errAction!.ACTION_NONE
errNone!.setSelected(1)
errValue!.setText("")
break
case errAction!.ACTION_DEFAULT
errDefault!.setSelected(1)
errValue!.setText("")
break
swend
return
setEndAction:
if endApp!.isSelected() then action! = bui!.appAction(endValue!.getText())
if endUrl!.isSelected() then action! = bui!.urlAction(endValue!.getText())
if endMsg!.isSelected() then action! = bui!.msgAction(endValue!.getText())
if endNone!.isSelected() then action! = bui!.noneAction()
if endDefault!.isSelected() then action! = bui!.defaultAction()
bui!.setEndAction(action!,err=*return)
return
setErrAction:
if errApp!.isSelected() then action! = bui!.appAction(errValue!.getText())
if errUrl!.isSelected() then action! = bui!.urlAction(errValue!.getText())
if errMsg!.isSelected() then action! = bui!.msgAction(errValue!.getText())
if errNone!.isSelected() then action! = bui!.noneAction()
if errDefault!.isSelected() then action! = bui!.defaultAction()
bui!.setErrAction(action!,err=*return)
return
showConfirmDialogOn:
bui!.setShowConfirmCloseDialog(1,err=*next)
return
showConfirmDialogOff:
bui!.setShowConfirmCloseDialog(0,err=*next)
return
showBusy:
busy! = bui!.getBusyIndicator(err=*return)
rem ' BBjBusyIndicator::setAttribute BBj 22.02+ DWC
busy!.setAttribute("spinner-clockwise","false",err=*next)
busy!.setAttribute("spinner-speed","2000",err=*next)
busy!.setAttribute("spinner-expanse","3xl",err=*next)
busy!.setAttribute("spinner-theme","info",err=*next)
busy!.setText(busyMessage!.getText())
busy!.setVisible(1)
wait 3
busy!.setVisible(0)
return
on_lost_connection:
event$ = "ON_LOST_CONNECTION"
goto terminate
on_browser_close:
event$ = "ON_BROWSER_CLOSE"
goto terminate
terminate:
seterr release
System.err.println(pgm(-2)+" "+event$+" "+str(tcb(19)))
filename$ = System.getProperty("user.home") + "/Desktop/" + event$ + ".txt"
u = unt
open (u,mode="o_create,o_trunk")filename$
print (u)date(0:"%Hz:%mz:%sz.%tz ")+event$+" "+str(tcb(19))
close (u)
release:
release -1
See Also
See the BBj Object Diagram for an illustration of the relationship between BBj Objects.