You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 23:54:00