Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Greasemonkey加载我自己的视频播放器,跨域_Javascript_Flash_Uri_Base64_Greasemonkey - Fatal编程技术网

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

Javascript 使用Greasemonkey加载我自己的视频播放器,跨域,javascript,flash,uri,base64,greasemonkey,Javascript,Flash,Uri,Base64,Greasemonkey,我制作了一个脚本来转换所有wmvavimp3wavmp4等链接,以便与嵌入式jwplayer一起播放。播放机加载但不播放视频,而是显示以下错误:任务队列在步骤5失败:由于跨域策略限制,无法加载播放列表。 在线搜索让我意识到我需要一个名为crossdomain.xml或类似的文件。既然这是一个可以在任何网站上运行的脚本,我显然不能这么做 我想也许可以将整个播放器内联到一个数据uri中。我也这样试过: 这是我从中获取播放器的站点: 我想做的事可能吗?我想它就像img的数据uri一样工作。我错过什么了

我制作了一个脚本来转换所有
wmv
avi
mp3
wav
mp4
等链接,以便与嵌入式jwplayer一起播放。播放机加载但不播放视频,而是显示以下错误:
任务队列在步骤5失败:由于跨域策略限制,无法加载播放列表。

在线搜索让我意识到我需要一个名为crossdomain.xml或类似的文件。既然这是一个可以在任何网站上运行的脚本,我显然不能这么做

我想也许可以将整个播放器内联到一个数据uri中。我也这样试过:

这是我从中获取播放器的站点:

我想做的事可能吗?我想它就像img的数据uri一样工作。我错过什么了吗

编辑:

数据URI在
节点上不起作用。这就是为什么

此外,当使用直接
方法时,
player.swf
文件必须与视频位于同一域,否则跨站点安全将阻止视频加载。这个特定的块可以内置在这个特定的
player.swf

然而当使用Longtailvideo的
jwplayer.setup()
功能时(他们还是推荐),播放器似乎可以工作

您必须使用播放机的托管版本,但幸运的是,
http://player.longtailvideo.com/player.swf

它将给出一个
网络错误:404未找到-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
    } );
} );
/==UserScript==
//@name\u视频嵌入乐趣
//@包括http://YOUR_SITE/*
//@需要http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js
//@需要http://player.longtailvideo.com/jwplayer.js
//==/UserScript==
//---查找所有超链接以选择视频文件。
var videoLinks=$([href$='.mpg']、a[href$='.mp4']、a[href$='.wmv']);
//---对于每个视频链接,激活我们的视频播放器。
videoLinks.each(功能(J){
var jThis=$(本);
var vidURL=jThis.attr('href');
var contID='myVidContainer_uuz'+J;
jThis.after('加载播放器…');
jwplayer(contID).安装程序({
flashplayer:“http://player.longtailvideo.com/player.swf",
文件:vidURL,
身高:344,
宽度:480
} );
} );


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

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

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

    • 编写自己的Firefox插件,该插件不受跨域修补本地文件(
      player.swf
      )的限制。您可以使用Greasemonkey或脚本式代码

    • 让您的GM脚本将视频AJAX发送到您自己的服务器(可以是您的本地机器运行,等等)。然后,所述机器将向您提供视频和
      播放器.swf
      ,可能以
      的形式


    错误是不言自明的。@yoda:什么错误?你是说跨域的?你看了整个问题了吗?是的,我看了。我坚持我说的话<代码>播放列表由于跨域策略限制而无法加载@yoda:我理解这个错误,有没有解决这个问题的方法?唯一可以绕过这个问题的方法不是使用greasemonkey(又名客户端脚本),而是使用服务器端脚本。那么,为什么mp3阅读器也能做到这一点呢!我测试中的一些XSS限制是由我的安全附加组件引起的。我用一个脚本更新了我的答案——因为当一些傻瓜记得放松他的RequestPolicy设置时,这个脚本就起作用了在规定的限制范围内,它工作得非常好。从更新的答案中加载脚本并访问。我编辑了问题,以包含我对其外观的快照。正如您所看到的,它仍然不能与wmv一起使用,这正是我需要它的原因,我试图解释:wmv格式不能与您选择的播放器一起使用。这是经过设计的(WMV格式,或该播放器,或两者兼而有之)。找到另一个玩家(怀疑)或开发两种万无一失的方法之一。