AppleScript - 执行 JavaScript returns 缺失值

AppleScript - do JavaScript returns missing value

下面的脚本用于点击按钮加载我们网站上的日期,然后获取该日期的值。

然后应该return那个日期值,稍后将在一些比较中使用。 但是,当我记录 doJavaStuff 和 emptyDate 时,它​​们都返回为“(*缺失值 *)”。 显示对话框 for emptyDate 也 returns "msng".

为什么 do JavaScript 的结果不是 returned?

我查看了多篇文章和来源并尝试了多种建议,但没有任何效果。 例如我尝试将 do JavaScript 的第二行设置为一个变量,然后 returning 该变量,但不知何故使 AppleScript 变量未定义。

我对 AppleScript 比较陌生,所以我可能遗漏了一些明显的东西。

global emptyDue, serviceDate, doJavaStuff
set emptyDue to " "
set doJavaStuff to " "
set serviceDate to "2021-11-30"

on isEmptyDue()
    
    tell application "Safari" to tell document 1
        set doJavaStuff to do JavaScript
        "document.getElementById('trgUseNext').click(); #clicks button to load date.
            document.getElementById('inspDate').value;" --gets the value of date
        return doJavaStuff
    end tell
    
end isEmptyDue

set emptyDate to isEmptyDue()
display dialog emptyDate

log doJavaStuff
log emptyDate

我能够使用恰好位于此 Whosebug 页面 (post-id) 上的元素复制您的问题,使用您脚本的这个简化版本:

on isEmptyDue()
    tell application "Safari" to tell document 1
        set doJavaStuff to do JavaScript
        "document.getElementById('post-id').value"
        return doJavaStuff
    end tell
end isEmptyDue

set emptyDate to isEmptyDue()
display dialog emptyDate

如您所述,return 值是“msng”。

问题似乎是 AppleScript 非常乐意在自己的行中只包含引号文本,并且非常乐意运行 do JavaScript 没有脚本。也就是说,您提供的代码没有 运行 任何 JavaScript:它调用 do JavaScript 什么都不做,然后下一行是 AppleScript 忽略的文本字符串。

如果我将这些行组合成一行而不是两行,display dialog emptyDate 会在此 Whosebug 页面上显示元素 post-id 的预期 8 位值(通过查看源代码找到) .

on isEmptyDue()
    tell application "Safari" to tell document 1
        set doJavaStuff to do JavaScript "document.getElementById('post-id').value"
        return doJavaStuff
    end tell
end isEmptyDue

set emptyDate to isEmptyDue()
display dialog emptyDate

这很难追查,因为两个“错误”都没有提供明显的错误:do JavaScript 没有任何文本不是错误——相反,它 return 是一个神秘的字符串,“ msng”,我怀疑但不知道它代表“缺失”——一行中的字符串本身也不是错误。所以它看起来像是在做某事而不起作用,而不是什么都不做而不起作用。