Bizarrerie intéressante avec le mot-clé «avec» dans javascript et les fenêtres parent / enfant
-
28-10-2019 - |
Question
J'ai remarqué quelque chose de particulier à propos du mot-clé "with" en javascript et de la relation entre les fenêtres parent et enfant, en particulier window.opener.Je n'ai pas testé cela à partir de la fenêtre parente, juste l'enfant, mais cela vaut la peine de le noter dans l'exemple ci-dessous -
Fenêtre parent (Parent.html):
// global scope
function ParentFunc() { alert("I am a parent function"); }
Fenêtre enfant (Child.html):
// global scope
var baseWin = window.opener;
// "this" keyword corresponds to Child.html when function below is called
function Child_Onclick_Func()
{
alert("Hi, from Child");
with (baseWin)
{
ParentFunc();
alert("Hi, from Parent");
}
alert("Hi, back to Child");
}
Le mot-clé "with", dans ce cas, bascule vers la fenêtre parente et la seconde alerte déclenche également un focus implicite sur la fenêtre parente.Je ne savais pas que "avec" passerait à la fenêtre parente, mais c'est logique maintenant.
La solution
Cela se produit parce que window
est l'espace de noms global lors de l'exécution de javascript dans un navigateur Web.Lorsque vous écrivez:
alert('Hello, World!');
Vous appelez en fait la méthode window.alert
.