4
votes

Comment exécuter le script dans la fenêtre parent pour la fenêtre enfant?

Mon enfant.html a un bouton sur lequel cliquer en utilisant le script $ ('[value = "Submit"]'). click (); Je veux l'invoquer depuis parent.html

Quelque chose comme ça:

var popUp = window.open ('https: //child.html'); popUp. $ ('[value = "Submit"]'). click (); // cette ligne devrait être corrigée

Comment est-ce possible?


1 commentaires

En fait, votre ligne devrait fonctionner (en supposant que vous soyez sur le même domaine afin que vous ayez accès à la fenêtre enfant). Quel message d'erreur obtenez-vous?


3 Réponses :


3
votes

Vous devez utiliser l'API window.postMessage . Voici un exemple de code.

child.html

let child = window.open('child.html');

child.postMessage(); // notice that I did not pass message argument, since you just want to trigger the function, but if you want to pass some data to function using event parameter, just pass data to this function (for example string or object etc.)

parent.html

function functionToBeExecuted(event)
{
  // do click or whatever you want
}

window.addEventListener("message", functionToBeExecuted, false);


2 commentaires

Merci. Cela peut être utile pour beaucoup. Mais, je recherche child.html avec zéro script


Utilisez ceci dans parent: child.document.getElementById ('mon-bouton'). Cliquez sur (). Et j'ai posté une autre réponse, qui répond à votre question avec zéro script dans child.html.



2
votes

Je suis allé dans un genre de problème similaire où j'avais iframe (contenant le html enfant) dans mon html parent. J'ai résolu ce $ (". DivClass iframe"). Contents (). Find ("button"). Trigger ('click'); Dans votre cas, sa fenêtre pop, je ne sais pas quelle fenêtre vous utilisez: pop personnalisée ou pop du navigateur. Vous pouvez ajouter une iframe dans votre popup pour résoudre ce problème en utilisant le même code que ce que j'ai fait. La condition est que la fenêtre contextuelle doit être une fenêtre contextuelle HTML personnalisée et non l'autre fenêtre contextuelle fournie par le navigateur .


2 commentaires

avez-vous un exemple de code ou quelque chose sur l'iframe mentionné ci-dessus? Merci


Désolé éruption cutanée, j'étais dehors pendant le week-end. Si vous voulez encore de l'aide, je peux.



1
votes

Utilisez ce code dans parent.html pour cliquer sur le bouton:

let child = window.open('child.html');
let doClick = () => child.document.getElementById('my-button').click();

child.addEventListener('load', doClick(), true);

C'est ce que vous voulez ... Mais ma suggestion est de faire fonction sur l'enfant et d'utiliser l'API window.postMessage pour déclencher il ...


7 commentaires

TypeError: impossible de lire la propriété 'click' de null. Pourriez-vous m'aider à ajouter un écouteur d'événement de chargement dans ce code? Merci :)


Oui, cela se produit parce que le document n'est pas encore chargé, mais cela ne se produit que si ce script est exécuté automatiquement à la racine du script, mais si vous l'invoquez par une action comme un autre clic de bouton, cela fonctionnera, veuillez décrire comment vous voulez déclenchez ce clic pour que je puisse modifier ma réponse correctement.


Bonjour, je voudrais le déclencher automatiquement une fois le chargement terminé. Je sais qu'il ne se synchronise pas, mais je crois qu'il y aura une solution.


Toujours la même erreur. Cochez comme solution préférée.


Vous ne savez pas comment vous obtenez cette erreur, pourriez-vous partager votre code? Avez-vous ajouté id = "my-button" à votre bouton ou avez-vous modifié le sélecteur utilisé dans mon code en fonction de votre identifiant de bouton ou de votre classe?


J'essaye de cette façon, laissez child = window.open ('child.html'); let doClick = () => $ ('[value = "Soumettre"]'). click (); child.addEventListener ('load', doClick (), true); Essayé en tant que child.document.getElementById ('mon-bouton'). Click (); aussi. Ne fonctionne toujours pas.


Veuillez utiliser du javascript simple, utilisez child.document.getElementById ('mon-bouton'). Click (); et changez l'identifiant de votre entrée / bouton en "mon-bouton", ou autre chose, mais assurez-vous ensuite de changer le sélecteur passé à getElementById.