javascript-automation - 将“doJavaScript”返回值分配给变量(数组)的问题
问题描述
我正在尝试使用 JXA 并尝试“移植”一个小脚本,该脚本从网页中解析曲目名称。此脚本当前作为 Keyboard Maestro 宏工作,并在当前 Safari 窗口中执行:
var trackBlock = document.getElementsByClassName("track tracklist_track_title");
var trackList = [];
for (var a of trackBlock) {
trackList.push(a.innerText);
}
trackList.join("\n");
问题是如果doJavaScript
返回单个字符串(变量trackName1
包含曲目标题),我的移植尝试在 JXA 中效果很好:
var sfr = Application("Safari");
var trackName1 = sfr.doJavaScript('document.getElementsByClassName("track tracklist_track_title")[1].innerText', { in: sfr.windows[0].currentTab });
trackName1 // contains track name
但是,如果我更改代码,以便doJavaScript
返回一个数组(就像在初始代码中一样),则该变量为空。请你解释一下:我做错了什么?
var sfr = Application("Safari");
var trackBlock = sfr.doJavaScript('document.getElementsByClassName("track tracklist_track_title")', { in: sfr.windows[0].currentTab });
trackBlock[0].innerText; // null
谢谢!
解决方案
回答你的第二个问题:
为什么第一个 doJavaScript 调用返回 null,而第三个返回预期值?
var scr2run = 'document.getElementsByClassName("tracklist_track_title")';
var scr2run1 = 'document.getElementsByClassName("tracklist_track_title")[0]';
var scr2run2 = 'document.getElementsByClassName("tracklist_track_title")[0].innerText';
第三个 JavaScript 返回一个文本值,而前两个没有。它们返回一个元素集合和一个元素。
推荐阅读
- html - 接下来对齐导航栏下拉项
- android - 如何通过滚动仅显示微调器中的前 3 个项目和其他项目?
- reactjs - IE11 中的故事书有问题。“未定义弱集”
- java - AWS texttract 提取元数据和置信度分数
- outlook-web-addins - Outlook 加载项对话框的事件处理程序失败
- javascript - 为什么我的代码没有改变 div 颜色?
- html - 浏览器渲染问题
- cassandra - 如何使用 Java 跟踪 Cassandra 表中的更改
- c# - 如何在 C# Web API 中发布 IFormFile?
- remote-debugging - IIS 中的 ASP.NET Web API 远程调试中未命中断点