11521 sujets
JavaScript, DOM et API Web HTML5
Bonsoir;
l'objectif : jouer une musique sans coupure au cours de la navigation sur le site, de page en page.
Comme je n'arrive pas à mettre le focus sur l'opener, l’idée est de transférer l'url de l'opener vers l'openée, et de mettre le son sur l'opener.
Le code :
Le résultat : https://paris.doobee.fr
Bonne nuit !
l'objectif : jouer une musique sans coupure au cours de la navigation sur le site, de page en page.
Comme je n'arrive pas à mettre le focus sur l'opener, l’idée est de transférer l'url de l'opener vers l'openée, et de mettre le son sur l'opener.
Le code :
include "Data/codes.data" ;
$nombre = count( $codes ) ;
$article = $nombre == 1 ? "le" : "un" ;
$script = "
let superbox=$('superbox'), codes=['".implode( APOS.VI.APOS, $codes )."'] ;
if($nombre) code=codes.tirer(); else superbox.remove();
if(opener) superbox.$('bouton').html($nombre>1?'jouer un autre son':'jouer le son');
" ;
$onclick = "
let url='https://www.youtube.com/embed/'+(code=codes.tirer(code))+'?autoplay=1';
if(opener) opener.close(); w.open(location); location=url;
" ;
$superbox = array(
"style" => "superbox bouton { float:right; margin:1ex 5% .5ex; }",
"bouton onclick=\"$onclick\"" => "jouer $article son",
"script" => $script,
) ;
echo array2html( $superbox, "superbox" ) ;
Le résultat : https://paris.doobee.fr
Bonne nuit !
Bonjour !
Voici le dernier état du juke-box, quelque peu perfectionné (en particulier, il utilise localStorage, ce qui donne une ergonomie plus satisfaisante) :
Et la fonction JS string.tubejouer :
La question d'origine reste entière ; Pourquoi n'arrivé-je pas à remettre le focus sur la fenêtre de départ ???
Modifié par dagobert (21 Feb 2022 - 18:03)
Voici le dernier état du juke-box, quelque peu perfectionné (en particulier, il utilise localStorage, ce qui donne une ergonomie plus satisfaisante) :
include "Data/codes.data" ;
$nombre = count( $codes ) ;
$article = $nombre == 1 ? "le" : "un" ;
$onclick = "localStorage.setItem('youcode',codes.tirer(localStorage.getItem('youcode')).tubejouer());" ;
$script = "
let superbox=$('superbox'), codes=['".implode( APOS.VI.APOS, $codes )."'] ;
if(!$nombre) superbox.remove();
if(opener) superbox.$('bouton').html($nombre>1?'jouer un autre son':'jouer le son');
" ;
$superbox = array(
"style" => "superbox bouton { float:right; margin:1ex 5% .5ex; }",
"bouton onclick=\"$onclick\"" => "jouer $article son",
"script" => $script,
) ;
echo array2html( $superbox, "superbox" ) ;
:Et la fonction JS string.tubejouer :
String.prototype.tubejouer=function()
{
if(opener) opener.close();
w.open(location);
location='https://www.youtube.com/embed/'+this+'?autoplay=1';
return this;
}
La question d'origine reste entière ; Pourquoi n'arrivé-je pas à remettre le focus sur la fenêtre de départ ???
Modifié par dagobert (21 Feb 2022 - 18:03)
Bonjour,
Javascript ne peut pas maitriser ça facilement, car ça dépend du navigateur, de sa version, et des paramétrages faits par l'utilisateur dans le navigateur. Par exemple, l'ouverture d'une 2e fenêtre peut tout simplement être bloquée par le navigateur.
Et on ne sait pas ce que tu as fait quand "ça ne marchait pas". On ne peut pas régler ce genre de problème en se contentant d'ajouter un window.focus() un peu au hasard quelque part. Et on ne peut probablement pas régler ce genre de problèmes "en toutes circonstances".
Amicalement,
PS: ouvrir plusieurs fenêtres est de toute façon sources d'ennuis interminables.
Javascript ne peut pas maitriser ça facilement, car ça dépend du navigateur, de sa version, et des paramétrages faits par l'utilisateur dans le navigateur. Par exemple, l'ouverture d'une 2e fenêtre peut tout simplement être bloquée par le navigateur.
Et on ne sait pas ce que tu as fait quand "ça ne marchait pas". On ne peut pas régler ce genre de problème en se contentant d'ajouter un window.focus() un peu au hasard quelque part. Et on ne peut probablement pas régler ce genre de problèmes "en toutes circonstances".
Amicalement,
PS: ouvrir plusieurs fenêtres est de toute façon sources d'ennuis interminables.