使用Greasemonkey加载我自己的视频播放器,跨域

时间:2011-12-21 02:10:25

标签: javascript flash uri base64 greasemonkey

我制作了一个脚本来转换所有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。我错过了什么吗?

EDIT:!
Screen shot of the fabulous ;) GM script under test

1 个答案:

答案 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
    } );
} );



警告:

  1. 某些媒体类型(或该播放器)似乎内置了额外的XSS“保护”。这意味着.wmv文件不起作用,例如,虽然许多.mp4文件都有

  2. 视频文件显然必须与此播放器位于完全相同的域中。因此,包含视频foo.com\somepage.htm的目标网页foo.com\somevid.mp4将(通常)正常工作,但如果视频为cdn.foo.com\somevid.mp4,则无效。

  3. 使用此播放器的唯一简单方法仍然是以下两个选项:

    • 编写您自己的Firefox插件,该插件没有限制将本地文件(player.swf),跨域修补到页面中。你可以分享Greasemonkey或Scriptish代码。

    • 让您的GM脚本AJAX将视频发送到您自己的服务器(可以是运行XAMPP的本地计算机等)。然后,所述计算机将为视频和player.swf提供视频,可能是<iframe>