执行do JavaScript后AppleScript的emptyDue变量未定义如何解决?
核心原因
你的问题由两个AppleScript作用域规则共同导致:
- AppleScript 自定义处理程序(
on xxx()定义的函数)的作用域完全独立,仅在脚本顶部声明global不会让全局变量自动在处理程序内生效,必须在处理程序内部再次声明对应的全局变量,否则处理程序会默认将同名变量判定为局部变量。 - 在
tell application "xxx"的应用调用块内,AppleScript会优先将变量识别为目标应用的内置属性,你直接在Safari的tell块内操作emptyDue会被Safari当成自身属性查找,找不到自然抛出未定义错误,需要用my关键字显式指定变量属于当前脚本本身。
修复后的代码
global emptyDue, serviceDate set emptyDue to "" set serviceDate to "2021-11-30" on isEmptyDue() -- 处理程序内再次声明全局变量 global emptyDue, serviceDate tell application "Safari" to tell document 1 -- 用my指定是脚本自身的变量,避免被Safari识别为应用属性 set my emptyDue to do JavaScript "document.getElementById('trgUseNext').click(); document.getElementById('trgUseNext').value; --gets the date value from a webpage." if my emptyDue < my serviceDate then display dialog "TRUE" else display dialog "FALSE" end if end tell end isEmptyDue isEmptyDue() log emptyDue
内容的提问来源于stack exchange,提问作者improbablyconfused
相关产品推荐
相关产品推荐

