如何通过AppleScript获取Safari中JavaScript异步函数的返回值?
在Safari中通过AppleScript获取JavaScript异步函数返回值的问题
我需要在Safari中运行JavaScript并将返回值传递给AppleScript,类似《Return Javascript variable to AppleScript》的场景。
以下同步代码可正常执行:
tell application "Safari" tell front document set myVar to do JavaScript "function foo() {return 5;};result=foo()" return myVar end end tell
但当JavaScript函数为异步函数(需等待服务器多次响应)时,代码执行失败:
tell application "Safari" tell front document set myVar to do JavaScript "async function foo() {return 5;};result=foo()" return myVar end tell end tell
报错信息为:Script Error: The variable myVar is not defined。
即使改用包含await的JavaScript代码:async function foo() {return 5;};result=await foo(),仍会出现相同错误。
我需要获取异步函数返回值,是为了实现网站消息自动回复:一个JavaScript函数会关闭现有消息弹窗并等待其全部消失(使用const async_delay = ms => new Promise(res => setTimeout(res, ms));及await),另一个函数则打开目标消息弹窗并等待其加载完成。目前我在AppleScript中设置了足够长的延迟,但JavaScript的执行时间会随初始消息数量变化:若延迟过长,期间可能出现新弹窗导致回复对象错误。因此,获取异步JavaScript的返回值会让流程更简洁可靠。
请问AppleScript能否获取JavaScript异步函数的变量?
内容的提问来源于stack exchange,提问作者ginjaemocoes
相关产品推荐
相关产品推荐

