获取对未附加到DOM的视频对象的引用?

时间:2016-11-17 00:43:42

标签: javascript dom scope html5-video jwplayer

是否可以获取不在全局命名空间中且未附加到DOM的视频对象的引用,然后将其附加到DOM中的某个节点?

修改

关键是我无法访问创建和启动视频对象的匿名函数。就我而言,此步骤由运行时的某个外部脚本完成。我的目标是从该函数外部获取对v的引用。

代码

// This code is executed by some external script attached to my
// application at runtime. I don't have access to the internals
// of this function. I don't even know what the variable is named.
(function() {
    var v = document.createElement('video');
    v.src = 'http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4';

    // `v` will play, but you will only hear the audio.
    // actual video won't render because it's not attached
    // to the DOM
    v.play(true);
}());

执行document.querySelector('video')会返回一个空集,因为视频尚未附加到文档中。

演示

https://jsbin.com/celebup/edit?js,output

2 个答案:

答案 0 :(得分:2)

据我所知,从一些研究和测试来看,没有可靠的方法来实现这一目标。除非他们将元素附加到DOM,全局变量或以其他方式公开它,否则没有好的方法来访问它。

如果他们在没有将其附加到DOM的情况下自动播放代码中的视频,则问题出在他们的最后,他们应该修复它,或者您最好在其他地方寻找所需的功能。我的0.02美元。

答案 1 :(得分:1)

现在设置的方式是不可能的,内部的变量是在本地声明的,因此无法访问。如果您可以修改脚本,则可以将变量放在全局命名空间中,然后您可以访问它:

window.myScriptNamespace.v = document.createElement('video');
window.myScriptNamespace.v.src = 'http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4';

// `v` will play, but you will only hear the audio.
// actual video won't render because it's not attached
// to the DOM
window.myScriptNamespace.v.play(true);

但是,如果你不能改变它,我担心你没有多少可以做,它的概念相同:

Is it possible to access a function local variable from outside of the function?