PureBasic
PureBasic
Prevent JavaScript Infinite Loops
See more JavaScript Examples
Demonstrates how prevent infinite loops or prevent the JavaScript from running for a longer amount of time than allowed.Chilkat PureBasic Downloads
IncludeFile "CkJs.pb"
IncludeFile "CkStringBuilder.pb"
IncludeFile "CkJsonObject.pb"
Procedure ChilkatExample()
success.i = 0
; This is the JavaScript we'll run:
; console.log('Starting infinite loop...'); while(true) {};
sbScript.i = CkStringBuilder::ckCreate()
If sbScript.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkStringBuilder::ckAppend(sbScript,"console.log('Starting infinite loop...'); while(true) {};")
js.i = CkJs::ckCreate()
If js.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
; Set a limit on the amount of time (in seconds) the script is allowed to run.
; If the JavaScript takes longer than this amount of time, then Chilkat kills the script without crashing the host program.
; The default value of TimeoutSeconds is 0, which indicates no limit.
; For this example, set a limit of 2 seconds.
CkJs::setCkTimeoutSeconds(js, 2)
result.i = CkJsonObject::ckCreate()
If result.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkJsonObject::setCkEmitCompact(result, 0)
; Run the script..
success = CkJs::ckEval(js,sbScript,result)
If success = 0
; Examine the result for an exception.
Debug CkJsonObject::ckEmit(result)
; The result contains this:
; {
; "exception": {
; "message": "interrupted - JavaScript exceeded the Chilkat.Js.TimeoutSeconds",
; "stack": [
; {
; "func": "<eval>",
; "file": "<input>",
; "line": 1,
; "col": 8
; }
; ]
; }
; }
; Also examine the LastErrorText.
Debug CkJs::ckLastErrorText(js)
CkStringBuilder::ckDispose(sbScript)
CkJs::ckDispose(js)
CkJsonObject::ckDispose(result)
ProcedureReturn
EndIf
; We should never get here..
Debug "Succeeded."
Debug CkJsonObject::ckEmit(result)
CkStringBuilder::ckDispose(sbScript)
CkJs::ckDispose(js)
CkJsonObject::ckDispose(result)
ProcedureReturn
EndProcedure