Apple Automator变量传JavaScript报错:找不到jsScript求解决
问题描述
尝试将Apple Automator生成的变量列表传入JavaScript,但运行时出现找不到变量jsScript的错误,当前代码如下:
function run(input, parameters) { var safari = Application("Safari"); safari.includeStandardAdditions = true; var jsScript ="jsScript += document.getElementById('search-name').value = '" + input[0] + input[1] + "';"; "jsScript += document.getElementById('search-location').value = '" + input[2] + input[4] + "';"; jsScript += "document.getElementById('wp-search').click();"; safari.doJavaScript(jsScript, { in:safari.windows[0].currentTab}); return jsScript; }
错误原因与修复方案
错误根源:
- 初始化
jsScript时,字符串开头多写了jsScript +=,导致生成的JS代码本身存在语法错误 - 第二行DOM操作代码仅写了字符串字面量,未执行
jsScript +=赋值操作,这部分代码完全没有被加入到变量中,后续拼接逻辑因此失效
- 初始化
修复步骤:
- 移除初始字符串里多余的
jsScript +=,直接从DOM操作代码开始拼接 - 给第二行字符串加上
jsScript +=赋值操作,确保代码片段被正确加入变量 - 可选:处理输入内容中的单引号,避免拼接后JS语法报错
- 移除初始字符串里多余的
修正后的代码
function run(input, parameters) { var safari = Application("Safari"); safari.includeStandardAdditions = true; var jsScript = "document.getElementById('search-name').value = '" + input[0] + input[1] + "';"; jsScript += "document.getElementById('search-location').value = '" + input[2] + input[4] + "';"; jsScript += "document.getElementById('wp-search').click();"; safari.doJavaScript(jsScript, { in: safari.windows[0].currentTab }); return jsScript; }
额外优化建议
如果input中的内容可能包含单引号,直接拼接会触发JS语法错误,可添加转义处理,同时用模板字符串提升代码可读性:
function run(input, parameters) { var safari = Application("Safari"); safari.includeStandardAdditions = true; // 转义输入内容中的单引号 var nameValue = (input[0] + input[1]).replace(/'/g, "\\'"); var locationValue = (input[2] + input[4]).replace(/'/g, "\\'"); // 用模板字符串拼接代码,更易维护 var jsScript = ` document.getElementById('search-name').value = '${nameValue}'; document.getElementById('search-location').value = '${locationValue}'; document.getElementById('wp-search').click(); `; safari.doJavaScript(jsScript, { in: safari.windows[0].currentTab }); return jsScript; }
内容的提问来源于stack exchange,提问作者funnysquid
相关产品推荐
相关产品推荐

