如何获得仅存在于内存中的HTML元素的引用

问题描述 投票:0回答:1

首先,这个问题的背景知识。

[我发现this Spotify社区的想法被抛弃后,我决定检查Web App的内部工作原理,以找出改变回放速度的某种方法。

证明Spotify的Web Player使用运行时JavaScript创建的常规HTML5 video标签,这意味着我可以修改它的playbackRate属性。我可以通过DevTools调试器对其进行引用,并且所有这些都可以使用。

但是该元素的引用隐藏在丑陋的代码和工厂函数中,因此我无法通过常规用户脚本来获取它。另外,该元素永远不会插入到DOM中(parentElementnull),因此document.getElementsByTagName()也将不起作用。


TL; DR:有没有一种方法可以引用未插入页面/仅存在于内存中的DOM元素?

我已经制作了一个简单的工作示例here。按下按钮后,将创建视频标签,但未将其插入页面。您无法引用。

javascript dom html5-video userscripts getelementsbytagname
1个回答
0
投票

我已经通过将document.createElement函数替换为包装函数解决了我的特定问题。在此包装器内,我检查特定的HTML标记并将其全局存储,以便以后可以访问。

我正在Chrome 81.0.4044.138上使用Tampermonkey。这是相关的代码:

const originalCreateElement = document.createElement;

document.createElement = function() {
  const ret = originalCreateElement.apply(document, arguments)

  if(arguments[0] == 'video'){
    document.videotag = ret;
  }

  return ret;
}

通过使用此方法,可以存储在全局数组上创建的每个标签。

© www.soinside.com 2019 - 2024. All rights reserved.