首先,这个问题的背景知识。
[我发现this Spotify社区的想法被抛弃后,我决定检查Web App的内部工作原理,以找出改变回放速度的某种方法。
证明Spotify的Web Player使用运行时JavaScript创建的常规HTML5 video
标签,这意味着我可以修改它的playbackRate
属性。我可以通过DevTools调试器对其进行引用,并且所有这些都可以使用。
但是该元素的引用隐藏在丑陋的代码和工厂函数中,因此我无法通过常规用户脚本来获取它。另外,该元素永远不会插入到DOM中(parentElement
为null
),因此document.getElementsByTagName()
也将不起作用。
TL; DR:有没有一种方法可以引用未插入页面/仅存在于内存中的DOM元素?
我已经制作了一个简单的工作示例here。按下按钮后,将创建视频标签,但未将其插入页面。您无法引用。
我已经通过将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;
}
通过使用此方法,可以存储在全局数组上创建的每个标签。