为什么我无法访问 NYT 填字游戏页面上的 HTML 集合中的元素?

Why can't I access elements in an HTML collection on the NYT crossword page?

提问人:GoldyCantCode 提问时间:4/19/2023 最后编辑:GoldyCantCode 更新时间:4/20/2023 访问量:67

问:

我正在尝试编写一个 Chrome 扩展程序,将“上一个谜题”和“下一个谜题”按钮添加到纽约时报填字游戏页面上的工具栏中。我讨厌必须导航回填字游戏存档才能找到另一个谜题,并且不敢相信他们没有将其包含在工具栏中。

我的计划是在工具栏上注入两个带有按钮的附加 li 标签,位于现有的 Rebus 和 Reset 按钮旁边。我已经弄清楚了要注入的所有 HTML,但我似乎无法将 ul 绑定到 javascript 变量以编辑 innerHTML。

我以为这将是一个简单的 10-15 行 javascript,30 分钟的项目。哎 呦。

例如,如果导航到:

https://www.nytimes.com/crosswords/game/daily/

或者,如果您没有《纽约时报》帐户:

https://www.nytimes.com/crosswords/game/mini/

我可以通过编写以下内容来检索工具栏的 HTMLCollection:

var toolbar = document.getElementsByClassName('xwd__toolbar--tools');返回一个 HTMLCollection,其中 ul 作为第 0 个元素。

但是,如果我尝试实际访问 0th 元素中的 ul,它会返回未定义,我一直在用头撞墙试图找出原因。

var requiredElement = document.getElementsByClassName('xwd__toolbar--tools')[0];返回undefined

毫无疑问,我在这里错过了什么显而易见的 javascript 东西?

JavaScript getElementsByClassName HTMLCollection 填字游戏

评论

1赞 tobifasc 4/19/2023
有没有其他网站可以重现它?不幸的是,NYTytimes要求我登录...
0赞 GoldyCantCode 4/20/2023
nytimes.com/crosswords/game/mini 您可以选择在没有帐户的情况下继续,并且此页面上具有相同的工具栏

答:

1赞 tobifasc 4/20/2023 #1

可能原因:

您正在查看赋值的返回值。

在导航到 https://www.nytimes.com/crosswords/game/mini/ 并在浏览器的开发人员控制台中执行后,果然我得到了未定义:var requiredElement = document.getElementsByClassName('xwd__toolbar--tools')[0];

Screenshot of developer console showing undefined return of variable assignment

尽管这说里面有一个值,如果我告诉它评估它的值,它将显示在开发人员控制台中:undefinedrequiredElement

Screenshot of developer console showing evaluation of variable

这里有一个有趣的答案,里面有更多细节:https://stackoverflow.com/a/22844864