YouTube API播放器不再适用于Safari

时间:2013-06-21 17:39:28

标签: javascript safari youtube-api

我创建了一个自定义皮肤来播放YouTube视频。它曾经适用于所有主流浏览器。它现在不再适用于桌面计算机的Safari。这是链接:

http://www.don-nan.net/gas_separator.php

控制台会记录一条错误,上面写着“错误:错误调用NPObject上的方法”

错误是由http://www.don-nan.net/chromeless.css第100行的y​​tplayer.playVideo()引起的。该脚本在Firefox和Chrome中运行良好。

2 个答案:

答案 0 :(得分:2)

杰米收到了这个问题的答案。谢谢杰米:

https://code.google.com/p/gdata-issues/issues/detail?id=4887

我更改了名为loadPlayer的函数。以前,该功能看起来像:

// The "main method" of this sample. Called when someone clicks "Run".
function loadPlayer() {

   // Lets Flash from another domain call JavaScript
   var params = { allowScriptAccess: "always", wmode: "transparent" };

   // The element id of the Flash embed
   var atts = { id: "ytPlayer" };

   // All of the magic handled by SWFObject (http://code.google.com/p/swfobject/)
   swfobject.embedSWF("http://www.youtube.com/apiplayer?" +
       "&enablejsapi=1&playerapiid=player1",
}

正如论坛底部的评论所述,版本号必须作为url中的参数传递。因此,改变这一行:

swfobject.embedSWF("http://www.youtube.com/apiplayer?" +

为:

swfobject.embedSWF("http://www.youtube.com/apiplayer?version=3" +

解决了这个问题。

答案 1 :(得分:0)

我遇到了完全相同的问题,而且我已经进一步跟踪了它。

在Safari中,我的“//www.youtube.com/apiplayer ...”嵌入式最终在检查器中显示为https请求,即使我的页面是通过http提供的。即使我明确指定该方案应该是http(“http://www.youtube.com/apiplayer ...”),我也会看到https请求。我认为这会触发导致NPObject错误的混合模式安全问题。

您网站上也发生了同样的事情。

这是最简单的例子:

<html>
<body>
    <object type="application/x-shockwave-flash"
            data="http://www.youtube.com/apiplayer">
    </object>
</body>
</html>

这会在Chrome中向www.youtube.com和s.ytimg.com发出http请求,但我在Safari中看到了https请求。

然而,我尝试过的其他玩家并没有这样做:

http://vimeo.com/moogaloop.swf
http://www.viddler.com/player/key

如果我将User-Agent更改为Safari以外的其他内容,也不会发生这种情况!