再谈脚本执行

前面所有的示例,Foxtable段都是通过ExecuteScriptAsync方法执行前端JS脚本的。

WebViewer还有另一个更为强大用于执行JS脚本的方法ExecuteScriptWithResultAsync。

ExecuteScriptWithResultAsync返回的值为CoreWebView2ExecuteScriptResult,该类型有以下成员:

Succeeded 逻辑值,表示脚本是否成功执行(无未处理的异常)
ResultAsJson 脚本执行结果的 JSON 字符串形式(成功时可用)
Exception 如果脚本执行失败,这里包含详细的异常信息
TryGetResultAsString 如果 Succeeded 为真且脚本执行结果是字符串,该方法会给出字符串结果的值

示例一

''' Async
Dim
wv As WebViewer = e.Form.Controls("WebViewer1").WebViewer
Dim
result = Await wv.CoreWebView2.ExecuteScriptWithResultAsync(
"document.getElementById('txtProduct').value"

)


If
result.Succeeded Then
   
' 获取 JSON 结果
   
Dim jsonResult As String = result.ResultAsJson
    MessageBoxA.Show(
"JSON结果:" & jsonResult)
       
' 如果确定结果是字符串,可以直接获取字符串值
   
Dim strResult As String = ""
   
Dim isSuccess As Integer = 0
    result.TryGetResultAsString(strResult, isSuccess)
'如果成功,会将isSuccess1
   
If isSuccess = 1 Then
        MessageBoxA.Show(
"字符串结果:" & strResult)
   
End If
Else

   
' 处理错误
   
Dim ex = result.Exception
    MessageBoxA.Show(
"错误:" & ex.Message & "行号:" & ex.LineNumber)
End
If

提示:

如果代码和执行前端脚本相关,尽量用MessageBoxA,而不是MessageBox,如果希望等待用户关闭对话框后再继续执行后续代码,可以加上 Await,例如:

Await
MessageBoxA.Show("错误:" & ex.Message & "行号:" & ex.LineNumber)

示例二

''' Async
Dim
wv As WebViewer = e.Form.Controls("WebViewer1").WebViewer
'
执行一个不存在的函数
Dim
result = Await wv.CoreWebView2.ExecuteScriptWithResultAsync("undefinedFunction();")
If
Not result.Succeeded Then
   
Dim ex = result.Exception
   
' 组合成一个消息框
    MessageBoxA.Show(
       
"错误类型: " & ex.Name & vbCrLf &
       
"错误消息: " & ex.Message & vbCrLf &
       
"错误位置: " & ex.LineNumber & ", " & ex.ColumnNumber & "" & vbCrLf &
       
"完整详情: " & ex.ToJson()
    )

End
If

 


本页地址:http://www.foxtable.com/webhelp/topics/6392.htm