BUI logoBBjWebManager::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.

Note:

In BBj 22.03 and higher, BBjWebManager is an alias for BBjBuiManager.

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.

Example

rem ' BBjWebManager::executeAsyncScript Example

rem ' BBjWebManager

declare BBjSysGui sysgui!
declare BBjWebManager bui!
declare BBjBusyIndicator busy!

sysgui = unt
open (sysgui)"X0"
sysgui! = bbjapi().getSysGui()

bui! = bbjapi().getWebManager()
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$ = "BBjWebManager: " + 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

BBjAPI

BBjSysGui

BBjControl

BBjWindow

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