javascript - 移动版 Google Chrome 中的 Vimeo SDK 问题
问题描述
一旦播放或暂停嵌入的 Vimeo 视频,我正在尝试更改 div 上的 id。我按照这个codepen开始。 https://codepen.io/filipbech/pen/Aybku 一切正常。适用于多种浏览器和 chrome 开发人员。我推送我的更改并在我的 Iphone 上进行测试。突然间,我的代码可以在除 Chrome 之外的所有移动浏览器上运行。
看起来,问题出在 message.event 上,但因为它适用于桌面和所有其他移动浏览器,我无法弄清楚发生了什么。以下是我在 codepen 链接中稍作修改的代码。
<script>
/* this version uses jquery, just to have easier clickhandlers and stuff - nothing that talks to vimeo is dependant on jQuery... */
var t;
/* Helper function to send a message to Vimeo-iframe */
function vimeoPost(action, value, target) {
var data = { method: action };
if (value) {
data.value = value;
}
target.contentWindow.postMessage(JSON.stringify(data), '*');
};
/* When a message is received, deal with it */
window.addEventListener('message', function(event) {
/* Get message and sender from the event */
var message = JSON.parse(event.data);
var sender = document.getElementById(message.player_id);
/* If the message.event is "ready", then send a message to add eventlisteners for play and pause also */
if(message.event == "ready") {
vimeoPost('addEventListener','play',sender);
vimeoPost('addEventListener','pause',sender);
}
/* Because of the above, we will start receiving events when video is played or paused - we will toggle a class, just to show it visually */
if(message.event == 'play') {
$('.vid').attr("id", "none");
$('.item').attr("id", "dead");
node = sender
pE = node.parentElement
parentElement = pE.parentElement
parentElement.setAttribute("id","active");
$('#tail').css('visibility', 'visible');
t = setTimeout(function() {
parentElement.setAttribute("id","none");
$('#tail').css('visibility', 'hidden');
}, 3000);
}
if(message.event == 'pause') {
clearTimeout(t);
sender.classList.remove('playing');
sender.classList.add('paused');
$('.item').attr("id", "dead");
node = sender
pE = node.parentElement
parentElement = pE.parentElement
parentElement.setAttribute("id","active");
$('#tail').css('visibility', 'visible');
}
}, false);
我希望这能奏效,我不知道我需要解决什么。它目前位于 zakicks.com/mobile.html,但无论您是否在使用手机,它都会重定向到移动网站。到目前为止,它适用于 Safari 和 Firefox 的移动设备。
解决方案
虽然我不知道为什么这段代码在 Chrome Mobile 上崩溃了,但我确实找到了一种解决方法 - Vimeo API 未检测到播放事件
var vPlayer1 = document.getElementById("video1");
var player1 = new Vimeo.Player(vPlayer1)
var vPlayer2 = document.getElementById("video2");
var player2 = new Vimeo.Player(vPlayer2)
player1.on('play', function() {
console.log('played the 1 video!');
vPlayer1.style.border = '10px solid red';
});
player2.on('play', function() {
console.log('played the 2 video!');
vPlayer2.style.border = '10px solid red';
});
player1.on('pause', function() {
console.log('paused the 1 video!');
vPlayer1.style.border = '10px solid blue';
});
player2.on('pause', function() {
console.log('paused the 2 video!');
vPlayer2.style.border = '10px solid blue';
});
不幸的是,这意味着对每个播放器进行逐个硬编码,而不是让消息处理所有现有播放器。
推荐阅读
- javascript - 使用 Fetch 发送文件和数据
- sorting - 如何对 MutableLiveData 进行排序
- >
- ember.js - 如何在新页面 Ember js 中呈现嵌套路由?
- python - 想知道您是否可以在进程池 python 的任务中拥有多个功能
- c# - 缺少 Visual Studio 2019 数据表可视化工具
- sql - 如何使查询选择语句结果像这样?
- java - Docker 中的 Postgres 服务器无法连接到 Spring Boot 应用程序
- java - 如何转换列表
- django - 未找到“{props.url}”的 NoReverseMatch.Reverse。尝试在 django 中创建一个名称为动态值的链接
- windows - 无法在 Windows 上打开具有多接口 USB 设备的设备