1
votes

javascript ne s'exécute pas après window.open ("")

J'essaie d'automatiser certaines choses sur un site Web mais j'ai ce problème où mon javascript ne s'exécute pas après l'ouverture de la page.

le code est très simple:

html:

var win = window.open("https://www.google.ca/", "_top");
win.onload = function(){
    console.log("test");
}

javascript:

var win = window.open("https://www.google.ca/", "_top");
console.log("test");

Lorsque vous appuyez sur f12 (sur chrome), vous pouvez voir que dans la console, le " test "n'est pas journalisé, mais si vous supprimez la fonction window.open , il est journalisé. Aucun autre code n'est exécuté après window.open ("") , j'aimerais savoir comment je peux le faire. J'ai aussi essayé ceci dans le code javascript, mais sans succès:

<!DOCTYPE html>
<html>

<head>
</head>

<body>
    <script src="script.js"></script>
</body>

</html>


2 commentaires

Eh bien, la réponse la plus évidente est simplement d'exécuter votre code AVANT d'exécuter window.open .


il doit être exécuté après window.open


3 Réponses :


3
votes

Cela ne peut pas fonctionner: en utilisant window.open avec le deuxième argument défini sur _top , vous demandez au navigateur d'ouvrir une autre page dans la même fenêtre qui est actuellement utilisé pour exécuter votre script. Et lorsque vous quittez le script actuel, son exécution est arrêtée


1 commentaires

comment pourrais-je exécuter le script sur la page Web que je veux alors?



1
votes

Dans votre code, ce n'est pas possible car, en utilisant _top , vous quittez la page d'origine, donc l'exécution du code s'arrête immédiatement.

Bien que vous puissiez utiliser un délai setTimeout pour obtenir le résultat souhaité.

<button onclick="openWindow();">Click here to Window</button>
console.log("Before Popup");

function openWindow(){
    setTimeout(function(){ window.open("https://www.google.ca/", "_top"); }, 100); //delay of 100ms
    console.log("Window Opened");
}


1 commentaires

Pouvez-vous expliquer ce que fait cet appel setTimeout , de sorte que l'OP puisse apprendre de votre réponse?



1
votes

Fondamentalement, le navigateur perd le focus lorsque vous faites window.open c'est pourquoi le code n'est pas exécuté car l'exécution est arrêtée. Enveloppez la fonction dans setTimeout pour l'exécuter même lorsque le navigateur n'est pas en focus. Votre code devient

var win = window.open("https://www.google.ca/", "_top");
setTimeout(() => console.log("test"));


0 commentaires