add part of iframe api

This commit is contained in:
bonjinnorenka 2023-08-18 11:40:50 +09:00
parent d6b34a4057
commit a9820eee5e
2 changed files with 501 additions and 0 deletions

View file

@ -62,3 +62,121 @@ addEventListener('load', function (e) {
});
}
});
function return_message(message,target_window){
if(target_window===undefined){
target_window = window.parent;
}
let url_params = new URLSearchParams(location.search);
let widgetid = url_params.get('widgetid');
let additional_info = {from:'invidious_control'};
if(widgetid!==null){
additional_info.widgetid = widgetid;
}
if(message.message_kind==='event'&&message.eventname==='timeupdate'||message.eventname==='loadedmetadata'){
let add_value = {getvolume:player.volume(),getduration:player.duration(),getcurrenttime:player.currentTime(),getplaystatus:player.paused(),getplaybackrate:player.playbackRate(),getloopstatus:player.loop(),getmutestatus:player.muted(),getfullscreenstatus:player.isFullscreen(),getavailableplaybackrates:options.playbackRates,gettitle:player_data.title};
additional_info['value'] = add_value;
}
if(message.eventname==='error'){
let add_value = {geterrorcode:player.error().code};
additional_info['value'] = add_value;
}
message = Object.assign(additional_info,message);
let target_origin = url_params.get('origin');
if(target_origin===null){
target_origin = '*';
}
target_window.postMessage(message,target_origin);
}
function control_embed_iframe(message){
let url_params = new URLSearchParams(location.search);
let origin = url_params.get('origin');
if(origin===null||origin===message.origin){
let widgetid = url_params.get('widgetid');
if((widgetid===null&&message.data.widgetid===null)||widgetid===message.data.widgetid&&message.data.target==='invidious_control'){
switch(message.data.eventname){
case 'play':
player.play();
break;
case 'pause':
player.pause();
break;
case 'getvolume':
return_message({command:'getvolume',value:player.volume(),message_kind:'info_return'},message.source);
break;
case 'setvolume':
player.volume(message.data.value);
break;
case 'getduration':
return_message({command:'getduration',value:player.duration(),message_kind:'info_return'},message.source);
break;
case 'getcurrenttime':
return_message({command:'getcurrenttime',value:player.currentTime(),message_kind:'info_return'},message.source);
break;
case 'seek':
const duration = player.duration();
let newTime = helpers.clamp(message.data.value, 0, duration);
player.currentTime(newTime);
break;
case 'getplaystatus':
return_message({command:'getplaystatus',value:player.paused(),message_kind:'info_return'},message.source);
break;
case 'getplaybackrate':
return_message({command:'getplaybackrate',value:player.playbackRate(),message_kind:'info_return'},message.source);
break;
case 'setplaybackrate':
player.playbackRate(message.data.value);
break;
case 'getavailableplaybackrates':
return_message({command:'getavailableplaybackrates',value:options.playbackRates,message_kind:'info_return'},message.source);
break;
case 'getloopstatus':
return_message({command:'getloopstatus',value:player.loop(),message_kind:'info_return'},message.source);
break;
case 'setloopstatus':
player.loop(message.data.value);
break;
case 'getmutestatus':
return_message({command:'getmutestatus',value:player.muted(),message_kind:'info_return'},message.source);
break;
case 'setmutestatus':
player.muted(message.data.value);
break;
case 'gettitle':
return_message({command:'gettitle',value:player_data.title,message_kind:'info_return'},message.source);
break;
case 'getfullscreenstatus':
return_message({command:'getfullscreenstatus',value:player.isFullscreen(),message_kind:'info_return'},message.source);
break;
case 'requestfullscreen':
player.requestFullscreen();
break;
case 'exitfullscreen':
player.exitFullscreen();
break;
case 'geterrorcode':
return_message({command:'geterrorcode',value:player.error().code,message_kind:'info_return'},message.source);
break;
case 'getplaylist':
}
}
}
}
if(new URLSearchParams(location.search).get('enablejsapi')==='1'){
window.addEventListener('message',control_embed_iframe);
player.on('ended',function(){return_message({message_kind:'event',eventname:'ended'})});
player.on('error',function(){return_message({message_kind:'event',eventname:'error'})});
player.on('ratechange',function(){return_message({message_kind:'event',eventname:'ratechange'})});
player.on('volumechange',function(){return_message({message_kind:'event',eventname:'volumechange'})});
player.on('waiting',function(){return_message({message_kind:'event',eventname:'waiting'})});
player.on('timeupdate',function(){return_message({message_kind:'event',eventname:'timeupdate'})});
player.on('loadedmetadata',function(){return_message({message_kind:'event',eventname:'loadedmetadata'})});
player.on('play',function(){return_message({message_kind:'event',eventname:'play'})});
player.on('seeking',function(){return_message({message_kind:'event',eventname:'seeking'})});
player.on('seeked',function(){return_message({message_kind:'event',eventname:'seeked'})});
player.on('playerresize',function(){return_message({message_kind:'event',eventname:'playerresize'})});
player.on('pause',function(){return_message({message_kind:'event',eventname:'pause'})});
}