使用Javascript从FireFox插件控制Youtube视频播放器

3

我编写了一个Firefox插件,在工具栏上添加了一个按钮。点击事件触发后,我尝试查找EMBED元素并调用其pauseVideo()方法,但是没有起作用。

我确定获取到的对象是EMBED元素,因为我显示了“src”属性。

var p1 = content.document.getElementById("movie_player");
window.alert(p1.src);

问题在于pauseVideo()无法正常工作:
try
{
p1.pauseVideo();
}
catch(e)
{
  window.alert(e); // this gives 'pauseVideo() is not a function'
}

此外,'allowscriptaccess'属性被设置为'always'。 不知道为什么它不起作用?我已经没有任何想法了。 谢谢!
2个回答

0

你需要使用postMessage与Youtube播放器进行通信,类似于这样:

    var doc = content.document;
    var scpt = doc.getElementById("uniq_script_id");
    if (!scpt) {
        scpt = doc.createElement("script");
        scpt.type = "text/javascript";
        scpt.id = "uniq_script_id";
        var code = [
            'window.addEventListener("message", function(e) {',
            '  var cmd = e.data;',
            '  var player = document.getElementById("movie_player");',
            '  player[cmd]();',
            '}, false);'
        ].join('\n');
        scpt.textContent = code;
        doc.body.appendChild(scpt);
    }

    window.postMessage("pauseVideo", "*");

我测试了你的代码,它在插件中无法工作,但是如果我打开开发者控制台并插入你的代码,则可以正常工作。为什么它在插件中无法工作?我知道如何将脚本附加到插件页面,但是当它被附加时,你的代码无法工作。 - Jigberto

0

已经设置好了,这是一个YouTube视频。 - WriteEatSleepRepeat
你只是想确保在 onYouTubePlayerReady 事件发生后再等待,对吧? - Greg Schechter
@Greg Schechter 你不知道 Firefox 插件吗?插件的工作方式不同,你的回答很差。 - Jigberto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接