我制作了一个脚本来转换所有wmv
avi
mp3
wav
mp4
等链接,以便与嵌入式jwplayer一起玩。播放器加载但不播放视频,而是显示以下错误:Task Queue failed at step 5: Playlist could not be loaded due to cross-domain policy restrictions.
在线搜索让我意识到我需要一个名为crossdomain.xml的文件或类似托管的文件。现在因为这是一个可以在任何网站上运行的脚本,我显然不能这样做。
我想过可能会在数据uri中列出整个玩家。我也是这样尝试的: DEMO
这是我从以下网站获取的网站:http://player.longtailvideo.com/player.swf
我正在尝试做什么?我想它就像一个img的数据uri。我错过了什么吗?
答案 0 :(得分:2)
数据URI不适用于<object>
或<embed>
个节点。这就是GM_getResourceURL()
will not work for this either。
此外,使用直接<embed>
方法时,player.swf
文件必须与视频位于同一域中,否则跨站点安全性将阻止视频加载。此特定块可以内置到此特定player.swf
中。
然而,当使用Longtailvideo的jwplayer.setup ()
功能(无论如何都推荐)时,播放器似乎可以正常工作。
您必须使用播放器的托管版本,但幸运的是,http://player.longtailvideo.com/player.swf
提供了一个版本
它会出现NetworkError: 404 Not Found - http://someSite/crossdomain.xml
错误,但视频会播放。
以下是适用的GM脚本示例:
// ==UserScript==
// @name _Video embed fun
// @include http://YOUR_SITE/*
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js
// @require http://player.longtailvideo.com/jwplayer.js
// ==/UserScript==
//--- Find all hyperlinks to select video files.
var videoLinks = $("a[href$='.mpg'], a[href$='.mp4'], a[href$='.wmv']");
//--- For each video link, activate our video player.
videoLinks.each ( function (J) {
var jThis = $(this);
var vidURL = jThis.attr ('href');
var contID = 'myVidContainer_' + J;
jThis.after ('<div id="' + contID + '">Loading the player ...</div>');
jwplayer (contID).setup ( {
flashplayer: "http://player.longtailvideo.com/player.swf",
file: vidURL,
height: 344,
width: 480
} );
} );
某些媒体类型(或该播放器)似乎内置了额外的XSS“保护”。这意味着.wmv
文件不起作用,例如,虽然许多.mp4
文件都有
视频文件显然必须与此播放器位于完全相同的域中。因此,包含视频foo.com\somepage.htm
的目标网页foo.com\somevid.mp4
将(通常)正常工作,但如果视频为cdn.foo.com\somevid.mp4
,则无效。
使用此播放器的唯一简单方法仍然是以下两个选项:
编写您自己的Firefox插件,该插件没有限制将本地文件(player.swf
),跨域修补到页面中。你可以分享Greasemonkey或Scriptish代码。
让您的GM脚本AJAX将视频发送到您自己的服务器(可以是运行XAMPP的本地计算机等)。然后,所述计算机将为视频和player.swf
提供视频,可能是<iframe>
。