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
关键修改点
- 移除原JS代码中
textContent后的多余点号,保证能正确获取目标元素的文本内容。 - 新增字符串转义逻辑:如果
varA本身包含单引号,直接拼接会破坏JS的字符串结构,因此需要将单引号转义为\'。 - 在拼接JS代码时,用单引号包裹
varA,确保JS将其识别为合法的字符串字面量。
额外适配
如果varA可能包含双引号,可以改用双引号包裹值,同时转义双引号:
set escapedVarA to replace_chars(varA, "\"", "\\\"") do JavaScript "document.getElementById('idB').value=\"" & escapedVarA & "\";"
内容的提问来源于stack exchange,提问作者Hyperion
相关产品推荐
相关产品推荐

