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

AppleScript跨Safari标签页传递JavaScript变量异常求助

解决Safari AppleScript跨标签传递字符串值的问题

问题原因

当varA包含非数字内容(比如字符串)时,直接拼接进JavaScript代码会触发语法错误。因为字符串值在JS中必须用引号包裹,原代码未做处理,导致JS将无引号的内容识别为变量而非字面量,进而抛出错误(错误编号-2753通常与JS执行语法错误相关)。另外原代码中textContent末尾多了一个多余的点号,也可能导致获取值异常。

修正后的脚本

tell application "Safari"
    tell tab 6 of window 1
        -- 移除textContent后的多余点号,确保正确获取文本内容
        set varA to do JavaScript "document.getElementById('idA').textContent" as string
    end tell
    tell tab 7 of window 1
        -- 转义字符串中的单引号,避免打断JS的字符串包裹逻辑
        set escapedVarA to replace_chars(varA, "'", "\\'")
        -- 用单引号包裹varA,确保JS识别为字符串字面量
        do JavaScript "document.getElementById('idB').value='" & escapedVarA & "';"
    end tell
end tell

-- 辅助函数:替换字符串中的指定字符,实现转义
on replace_chars(this_text, search_string, replacement_string)
    set AppleScript's text item delimiters to search_string
    set the item_list to every text item of this_text
    set AppleScript's text item delimiters to replacement_string
    set this_text to the item_list as string
    set AppleScript's text item delimiters to ""
    return this_text
end replace_chars

关键修改点

  1. 移除原JS代码中textContent后的多余点号,保证能正确获取目标元素的文本内容。
  2. 新增字符串转义逻辑:如果varA本身包含单引号,直接拼接会破坏JS的字符串结构,因此需要将单引号转义为\'。
  3. 在拼接JS代码时,用单引号包裹varA,确保JS将其识别为合法的字符串字面量。

额外适配

如果varA可能包含双引号,可以改用双引号包裹值,同时转义双引号:

set escapedVarA to replace_chars(varA, "\"", "\\\"")
do JavaScript "document.getElementById('idB').value=\"" & escapedVarA & "\";"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 17:12:34