web-dev-qa-db-fra.com

alternatives window.opener

J'ouvre une fenêtre popup modale. Ensuite, j'accède à une zone de texte de fenêtre parent et à d'autres attributs à l'aide de window.opener. Cela fonctionne très bien dans Firefox mais pas dans IE8. Cela donne l'erreur 'window.opener est null' . Comment puis-je accéder aux attributs de la fenêtre parente dans la fenêtre enfant qui fonctionne dans les deux navigateurs.

19
dmay

Vous pouvez passer des arguments à la fonction showModalDialog. Passez simplement l'objet window comme argument.

window.showModalDialog(theURL, window);

Vous pouvez accéder aux arguments depuis la fenêtre modale à l'aide de dialogArguments. Voir: http://msdn.Microsoft.com/en-us/library/ms533723%28VS.85%29.aspx

var openerWindow = window.dialogArguments;
7
Kaitnieks

Le problème peut être résolu de deux manières: Remarque: " window.opener " n'est pas pris en charge par IE si " showModalDialog " est utilisé.

1) Au lieu de " window.showModalDialog " utiliser " window.open "

2) Si vous souhaitez utiliser " window.showModalDialog ", procédez comme suit:

<script language="javascript" type="text/javascript">
    function YourFunction()
    {
        var opener = null;

        if (window.dialogArguments) // Internet Explorer supports window.dialogArguments
        { 
            opener = window.dialogArguments;
        } 
        else // Firefox, Safari, Google Chrome and Opera supports window.opener
        {        
            if (window.opener) 
            {
                opener = window.opener;
            }
        }       
        // write you code and refer "opener"
        window.close();
    }
</script>
9
Krishn Y

Désactivez le "Mode protégé" d'Internet Explorer, qui empêche l'accès à cet objet.

Les étapes pour cela sont:

  1. Appuyez sur Alt + T pour afficher le menu Outils.
  2. Cliquez sur "Options Internet"
  3. Sélectionnez l'onglet "Sécurité"
  4. Assurez-vous que la zone sélectionnée contient votre site. Pour un site intranet, il s’agit généralement d’une zone "Intranet local".
  5. Décochez "Activer le mode protégé"
  6. Fermez tous les onglets et toutes les fenêtres IE, puis rouvrez-les.

Vous devriez maintenant pouvoir accéder à l'objet window.opener.

1
Aidan

L'approche que je choisirais est la suivante:

  1. Utilisez une bibliothèque d'interface utilisateur JavaScript existante, car vous n'êtes pas la première personne à vouloir le faire, à défaut
  2. Créez une fonction appelée OpenWindow, que le navigateur détecte pour la méthode window.opener

Par exemple:

if(window.opener == undefined) {
   //probably not Firefox...
}

et s'il le trouve, il l'utilise, sinon il teste la variante IE et l'utilise. Et puis, il vérifie la version de Safari, etc ...

0
Xhalent

Comme alternative aux navigateurs, vous pouvez attribuer un attribut personnalisé à la nouvelle fenêtre pendant son ouverture:

var popup = window.open(...);
popup.isPopup = true;

Ensuite, dans la page référée:

if (window.isPopup) {
  // Do something
}
else {
  // Not in a popup
}
0