Dailymotion播放器监听PLAYER_START事件调用mute()报错排查
问题解决:Uncaught (in promise) TypeError: player.mute is not a function
错误原因
你在回调里通过dailymotion.getPlayer(state.id)获取的对象并非有效的Dailymotion播放器实例,或者该实例不包含mute方法;更关键的是,绑定事件时你已经拿到了播放器实例,完全不需要重新调用getPlayer获取,这反而引入了额外的异步操作风险。
修复后的代码
// 直接接收播放器实例作为参数 const callback = (player) => { // 调用静音方法 player.mute(); }; // 获取页面所有嵌入的播放器实例 Promise.all(dailymotion.getAllPlayers()).then((players) => { // 给每个播放器绑定PLAYER_START事件,将当前播放器实例传入回调 players.forEach((player) => { player.on(dailymotion.events.PLAYER_START, () => callback(player)); }); });
备选方案(若mute()方法适配问题)
如果上述代码仍报错,可能是当前Dailymotion API已将mute()替换为setMuted方法,可改用:
const callback = (player) => { player.setMuted(true); };
补充说明
- 事件绑定阶段已经持有播放器实例,直接复用即可,避免重复调用
getPlayer带来的异步问题。 - 若坚持通过
state.id获取实例,需先打印console.log(player)确认返回对象的结构,确保它是标准的Dailymotion播放器实例。
内容的提问来源于stack exchange,提问作者StaceyKosheen
相关产品推荐
相关产品推荐

