我正在为WordPress构建一个插件,到目前为止,PHP库已经很好了.但我在使用JavaScript API时遇到了一些问题.
我正在尝试将它与jQuery一起使用,我认为WordPress版本的jQuery正在搞乱这个$f捷径.为什么这不起作用?
var vimeoPlayer = {
init: function() {
var vimeoPlayers = document.querySelectorAll('iframe'),
player;
jQuery('iframe.vimeo-player').each(function(index, iframe){
player = vimeoPlayers[index];
$f(player).vimeoPlayer.addEvent('ready', vimeoPlayer.ready);
});
},
addEvent: function(element, eventName, callback) {
if (element.addEventListener) {
element.addEventListener(eventName, callback, false);
}
else {
element.attachEvent(eventName, callback, false);
}
},
ready: function(player_id) {
alert(player_id);
}
}
jQuery(document).ready(function($){
vimeoPlayer.init.call();
});
Run Code Online (Sandbox Code Playgroud)
你可以在行动中看到它temp.woodshop.tv/?work/?dickies-campaign/?.
我收到此错误:
TypeError:表达式'$ f(播放器).vimeoPlayer'[undefined]的结果不是对象.
好的,我完全卡住了.我真的希望有人可能有使用Vimeo的Froogaloop API加载Vimeo视频的经验.
我似乎无法抓住"准备好"的事件.
Froogaloop:
<script src="http://a.vimeocdn.com/js/froogaloop2.min.js"></script>
Run Code Online (Sandbox Code Playgroud)
我的剧本:
$.getJSON('http://www.vimeo.com/api/oembed.json?url=' + encodeURIComponent('http://vimeo.com/27027307') + '&width=300&callback=?', function(data){
$('#video-container').html(data.html); //puts an iframe embed from vimeo's json
$('#video-container iframe').ready(function(){
player = document.querySelectorAll('iframe')[0];
$f(player).addEvent('ready', function(id){
console.log('success');
});
});
});
Run Code Online (Sandbox Code Playgroud)
视频加载正常.这是我在控制台中收到的消息:
Uncaught TypeError: Cannot read property 'ready' of undefined
Run Code Online (Sandbox Code Playgroud)
我需要使用事件监听器来检测暂停等.我看到这篇文章,但不幸的是,主要区别在于我是通过JSON动态加载的.此外,Vimeo有一个运行 Froogaloop的实例,但不是jQuery.
提前致谢!!!
这是我的困境:
我正在创建一个网站,允许用户提交将发布到网站的视频.用户提交Vimeo链接,视频以嵌入格式发布到站点.除非视频的创建者拥有PRO或PLUS Vimeo帐户,否则嵌入式vimeo视频无法在iPhone 3GS上运行(不确定iPhone 4,但它们可以在iPad上运行).
是否有任何办法可以让嵌入式vimeo视频在iPhone上运行?有任何想法吗?

编辑:我已经检查过,它确实可以在iPhone 4上运行.但仍然不是3GS.
嵌入代码
<iframe src="http://player.vimeo.com/video/<?php echo $videos[$i]; ?>?title=0&byline=0&portrait=0&color=ffff00" width="" height="" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen ></iframe>
Run Code Online (Sandbox Code Playgroud) 我正在尝试在我的网站上设置GA事件跟踪以获取IFRAMEVimeo视频嵌入.但是,我无法弄清楚跟踪对象应放在我的IFRAME代码中的位置/方式.
这是我的IFRAME嵌入代码:
<iframe src="http://player.vimeo.com/video/51447433" width="500"
height="281"frameborder="0" webkitAllowFullScreen
mozallowfullscreen allowFullScreen></iframe>
Run Code Online (Sandbox Code Playgroud)
这就是我认为的GA事件跟踪代码应该是这样的:
<a href="#" onClick="_gaq.push(['_trackEvent', 'Videos', 'Play', 'Title']);">Play</a>
Run Code Online (Sandbox Code Playgroud)
我的嵌入代码在哪里?有人可以告诉我这应该是什么样的/工作?
我的网页上有一个iframe.我通过javascript修改src属性,如下所示:
document.getElementById('myiframe').src = 'http://vimeo.com/videoid1';
document.getElementById('myiframe').src = 'http://vimeo.com/videoid2';
document.getElementById('myiframe').src = 'http://vimeo.com/videoid3';
Run Code Online (Sandbox Code Playgroud)
但是,每次我这样做,它都会记录在浏览器的历史记录中.因此,每次我在浏览器窗口中按下时,iframe内容都会从videoid3转到videoid2到videoid1.如果我再次按回,整个页面都会返回.
我想用javascript修改iframe src而不在浏览器的历史记录中记录一个条目.因此,如果我单击浏览器后退按钮,整个页面将返回而不更新iframe.
我尝试过这样的事情:
document.getElementById('myiframe').contentWindow.location.replace('http://vimeo.com/videoid1');
document.getElementById('myiframe').contentWindow.location.replace('http://vimeo.com/videoid2');
document.getElementById('myiframe').contentWindow.location.replace('http://vimeo.com/videoid3');
Run Code Online (Sandbox Code Playgroud)
虽然这使得浏览器后退按钮按照我想要的方式运行,但它打破了vimeo视频中的某些内容.Vimeo要求您通过iframe.src而不是contentWindow.location.replace()更改URL.
因此,如何在不登录历史记录的情况下修改iframe.src?
相关 这实际上是我正在探索解决主要问题的解决方案之一,我在这里发布 历史对象后退按钮与iframes
每个试图让Youtube/Vimeo视频在iOS上自动播放的人都知道这可能是一项痛苦的任务.Apple出于正确的原因阻止了'autoplay'参数,但有时您仍然需要使此功能正常工作.
我有同样的问题,自动播放youtube视频,显然,要让自动播放工作,你需要做一些javascript魔术,听取播放器的'onReady'事件,而不是当播放器加载并准备播放你打电话' player.play()'在没有任何其他用户干预的情况下启动它.
Vimeo也有一些javascript API,我很确定你可以用它做自动播放技巧,我只是无法弄清楚如何使用它.
他们有JS迷你库Froogaloop,让事情变得更容易,我看到@ila的这个答案与下面的html字符串一起使用它:
NSString *htmlString = [NSString stringWithFormat:
@"<html><head>"
"<script src=\"froogaloop.js\"></script>"
" <script>"
"function ready()"
"{$f(document.getElementById(\"player\")).api(\"play\");}"
"function func1() "
"{$f(document.getElementById(\"player\")).addEvent(\"ready\", ready);}"
"window.onload=func1;"
"</script></head><body>"
"<iframe id=\"player\" src=\"http://player.vimeo.com/video/39287488?api=1&player_id=player\" width=\"315\" height=\"455\" frameborder=\"0\" webkit-playsinline>"
" </iframe></body></html>"];
- (void)webViewDidFinishLoad:(UIWebView *)webView {
NSLog(@"webview loaded");
NSString *path = [[NSBundle mainBundle] pathForResource:@"froogaloop" ofType:@"js"];
NSString *jsCode = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
[webView stringByEvaluatingJavaScriptFromString:jsCode];
}
Run Code Online (Sandbox Code Playgroud)
但这对我来说不起作用,在向这段代码添加警报之后,我可以看到func1()调用并执行'addEvent'行,但是它接缝处理的ready()方法永远不会被调用,因为'ready'事件从未触发过(?) ...
有任何想法吗?
在我的Android应用程序中,我创建了一个WebView来播放Vimeo视频.当我加载活动时,会显示vimeo视频的正确预览,但是当我尝试播放时,我会看到以下屏幕:

有时视频中的音频播放,但我从未收到视频.以下是我的活动内容:
if(mediaURL.toLowerCase().contains("vimeo")){
Log.d(TAG, "adding viemo");
final WebView vimeoPlayer = new WebView(MediaPreview.this);
vimeoPlayer.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
vimeoPlayer.getSettings().setJavaScriptEnabled(true);
vimeoPlayer.getSettings().setLoadWithOverviewMode(true);
vimeoPlayer.getSettings().setUserAgentString("Android Mozilla/5.0 AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30");
vimeoPlayer.setWebChromeClient(new WebChromeClient());
vimeoPlayer.setWebViewClient(new WebViewClient());
vimeoPlayer.getSettings().setAppCacheEnabled(true);
vimeoPlayer.getSettings().setDomStorageEnabled(true);
vimeoPlayer.getSettings().setPluginState(PluginState.ON);
vimeo_url = mediaURL + "?player_id=player&title=0&byline=0&portrait=0&api=1&maxheight=480&maxwidth=800";
Log.d(TAG, "vimeo_url: " + vimeo_url);
vimeoPlayer.loadUrl(vimeo_url);
// vimeoPlayer.loadDataWithBaseURL("", vimeo_url, "text/html", "UTF-8", null);
mediaHolder.addView(vimeoPlayer);;
}
Run Code Online (Sandbox Code Playgroud)
我还没有看到在Android应用中使用Vimeo播放器的任何明确示例,所以如果有人让这个工作,那么非常感谢你的帮助!
我正在尝试在网站上实施上传模块,以便我们的用户将视频上传到我们的Vimeo帐户.我正在使用blueimp的jQuery File上传和Vimeo的新API. https://github.com/blueimp/jQuery-File-Upload/wiki/Options https://developer.vimeo.com/api/upload#http-put-uploading 我认为这是接近工作,但我必须失去了一些细节.根据Vimeo的API,我需要:1.生成上传票据,工作正常2.然后我将upload_link_secure传递给开始上传的jquery文件上传.这是PUT请求的请求标头如下所示:
Request Method:PUT
Status Code:200 OK
Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
Connection:keep-alive
Content-Length:43418955
Content-Type:multipart/form-data; boundary=----WebKitFormBoundarye8sGy57JH6ACoOfJ
Run Code Online (Sandbox Code Playgroud)
这是我调用jQuery文件上传的方式:
$('#file').fileupload({
url: upload_link_secure,
type: 'PUT'
});
Run Code Online (Sandbox Code Playgroud)
我也尝试将Content-Type标题强制为"video/mp4",但它最终没有任何区别.
我还通过绑定jquery fileupload的submit事件检查了文件的大小,并且我得到的字节数也比标题中发送的字节数少,本例中为43418764,这样可以吗?
状态代码:308恢复不完整
范围:字节= 0-3948544
状态代码:308恢复不完整
范围:字节= 0-38682624
状态代码:308恢复不完整
范围:字节= 0-43401216
范围:字节= 0-43418955
它似乎匹配第一个请求中的Content-Length发送,所以我执行DELETE请求,这是我得到的响应:
{"正文":{"错误":"您的视频文件无效.您上传的文件格式无效,或上传内容不完整.请确保在上传完成之前验证您的上传."},"状态":400,"header":{"Date":"Mon,06 Oct 2014 17","Server":"Apache","Vary":"Accept,Vimeo-Client-Id,Accept-Encoding","Cache" - 控制 ":" 无缓存,最大年龄= 315360000" , "过期": "星期四,2024年10月3日17", "内容长度": "184", "X-Cnection": "关闭"," Content-Type":"application/vnd.vimeo.error + json","Via":"1.1 dca1-10"}}
我一定犯了一个非常愚蠢的错误,但是我对所有那些HTTP请求和响应并不是很熟悉,有人知道我做错了什么吗?
谢谢 !
[编辑]非常感谢Dashron,我实际上必须将jQuery fileupload的multipart选项设置为false:
$('#file').fileupload({
url: upload_link_secure,
type: 'PUT',
multipart: false
});
Run Code Online (Sandbox Code Playgroud)
之后,我收到此HTTP错误:
XMLHttpRequest cannot load https://1511632921.cloud.vimeo.com/upload?[...]. …Run Code Online (Sandbox Code Playgroud) 当我试图将视频从vimeo嵌入到我的网站时,我在chrome控制台中出错 -
拒绝加载脚本"的数据:应用程序/ JavaScript的; BASE64,dmFyIHVyY2hpblRyYWNrZXI9ZnVuY3Rpb24oKXt9 ... RUcmFja2VyQnlOYW1lOiBmdW5jdGlvbigpe190cmFja0V2ZW50OiBmdW5jdGlvbigpe319fTs =",因为它违反了以下内容安全政策指令:"脚本的src'自我’'不安全内联’ https://f.vimeocdn.com https://ssl.google-analytics.com https://js-agent.newrelic.com https://bam.nr-data.net https://f.vimeocdn.com ".
我在所有网站上都得到同样的错误,那就是包含vimeo播放器.例如 - https://player.vimeo.com/video/174560759
该错误导致我的javascript崩溃,后者与Vimeo播放器API进行通信.
也许有人知道,Vimeo有什么问题,以及我如何解决这个问题?
PS Firefox只是在控制台中向我显示警告,我的js运行良好.
自上次Safari更新到版本11以来,一些视频停止工作.最糟糕的是,有时候,就像五次尝试一次一样,它有效.我认为原因是我的JS脚本集成了Vimeo Player API,但最终甚至Vimeo的嵌入链接根本不起作用.
因此,当您在Safari 11中打开嵌入视频时,它将无法启动并完全阻止.你可以通过打开来看看它 https://player.vimeo.com/video/XXXXXXXX?autoplay=1
在控制台日志中,您可以获得以下内容:
Unhandled Promise Rejection: NotAllowedError (DOM Exception 35): The request is not allowed by the user agent or the platform in the current context, possibly because the user denied permission.
vimeo ×10
jquery ×3
froogaloop ×2
iframe ×2
video ×2
android ×1
autoplay ×1
back ×1
embed ×1
events ×1
file-upload ×1
history ×1
html ×1
html5-video ×1
ios ×1
iphone ×1
javascript ×1
objective-c ×1
php ×1
put ×1
safari ×1
webview ×1