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

AppleScript执行do JavaScript返回missing value问题求助

问题原因及修复方案
  • 语法错误:do JavaScript 命令需要将待执行的JS代码作为参数直接跟在命令后,原代码中将JS字符串单独拆成了一行,AppleScript将其识别为完全无关的独立语句,导致do JavaScript实际没有执行任何有效代码,返回默认的missing value。
  • JS代码存在语法错误:原代码在JS注释里用了#,而JS的单行注释应为//,非法的注释符号会导致JS执行失败,无返回值。
  • 全局变量作用域问题:在自定义处理器isEmptyDue中修改全局变量doJavaStuff,需要在处理器内部先声明该变量为全局变量,否则AppleScript会将其识别为局部变量,外部的全局变量不会被赋值。
  • DOM更新延迟问题:点击按钮触发日期加载是异步操作,点击后立即读取日期输入框的值,可能页面还没完成赋值,会读到空值。
修正后代码(兼容性更强,适配所有Safari版本)
global emptyDue, serviceDate, doJavaStuff
set emptyDue to " "
set doJavaStuff to " "
set serviceDate to "2021-11-30"

on isEmptyDue()
    -- 声明要修改的是全局变量
    global doJavaStuff
    tell application "Safari" to tell document 1
        -- 先执行点击操作加载日期
        do JavaScript "document.getElementById('trgUseNext').click();"
        -- 延迟0.1秒等待DOM更新,若加载较慢可适当调大数值
        delay 0.1
        -- 单独执行读取操作获取日期值
        set doJavaStuff to do JavaScript "document.getElementById('inspDate').value;"
        return doJavaStuff
    end tell
end isEmptyDue

set emptyDate to isEmptyDue()
display dialog emptyDate

log doJavaStuff
log emptyDate
注意事项

运行前请确认Safari已开启AppleScript执行JS的权限:打开Safari设置→高级→勾选「在菜单栏中显示开发」,再点击开发菜单→勾选「允许Apple事件中的JavaScript」即可。

内容的提问来源于stack exchange,提问作者improbablyconfused

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 15:42:03