3

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

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

控制台记录一个错误,上面写着“错误:在 NPObject 上调用方法时出错”

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

4

2 回答 2

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" +

解决了这个问题。

于 2013-10-22T16:39:10.917 回答
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 以外的其他东西,它也不会发生!

于 2013-07-11T15:05:08.837 回答