11484 sujets

JavaScript, DOM et API Web HTML5

Bonsoir,

à l'ouverture de la page, j'ouvre une seconde fenêtre. Je voudrais que le focus reste sur la première page. window.focus() ne semble pas fonctionner. Une idée ???
Modifié par dagobert (20 Feb 2022 - 00:18)
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 :

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) :


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)
Modérateur
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.