IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

window.opener avec Iframe et webextension


Sujet :

JavaScript

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mai 2010
    Messages : 72
    Points : 70
    Points
    70
    Par défaut window.opener avec Iframe et webextension
    Bonjour,

    J'utilise un site (Intranet) permettant de gérer des équipement et proposant via une fenêtre "popup" de surveiller en live l'équipement (refresh auto).
    Ces popup fonctionnent avec pas mal de javascript (les liens par exemple).

    Mon objectif : avoir plusieurs de ces éléments en une seule fenêtre en gardant le fonctionnement complet de chaque.
    J'ai créé une webextension (Firefox) qui permet :
    - via la popup de l'extension (celle définie dans browser_action), saisir la liste des éléments à ouvrir
    - appelle une page de l'extension qui va appeler la page de surveillance de chacun des éléments dans des iframes
    (le choix de l'iframe est fait pour conserver le bon fonctionnement de la page en question, surtout la partie js incluse).

    Jusque là tout va bien .

    La problématique : le js des pages de surveillance fait référence au window.opener... et là c'est le drame!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    var redirect = function (url)
    {
      if (window.opener!=null)
        {
            actionDefinition(3,1);
            selectionEquipement(000001);
            window.opener.location.href = url;
    	window.opener.focus();
        }
      else
       {
            alert("Impossible de faire la redirection sur la fenêtre mère car celle ci est fermée");
        } 
    }
    Et le window.opener est null...
    - parce que l'iframe ne l'a pas : pas vraiment de souci, je pourrais prendre le window.parent.opener
    - sauf que le parent n'en a pas non plus!

    Après 2 jours à chercher/tester/triturer dans tous les sens, je suis totalement bloqué.
    Voici une partie de ce que j'ai pu tester...

    -Dans mon extension, utiliser window.open (qui semble permettre la transmission de l'opener) plutôt que windows.create
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    window.open(page,'/survey/survey.html','titlebar=no,directories=no,addressbar=no,toolbar=no,location=no,scrollbars=yes,resizable=yes');
     
    //plutôt que
     
    browser.windows.create({type: "popup",url: "/survey/survey.html",width: 1400,height: 800});
    -> Perdu, apparemment les webextension Firefox ne le permettent pas (en cherchant le pourquoi, la seule réponse trouvée était d'utiliser windows.create
    -> De plus, la fenêtre appellante serait "moz-extension:\\...."


    - ouvrir une page de surveillance et injecter du code pour remplacer la location.href par la page survey de mon extension
    -> perdu, un site ne peux accéder aux pages de l'extension (cross...)
    - modifier le javascript de la page de surveillance (en appelant une de l'extension ou : il me faut toujours lui dire d'ouvrir dans la fenêtre principale...
    - etc

    La question reste : "comment puis-je récupérer la référence à la fenêtre principale lors de l'ouverture d'une fenêtre via la popup d'une webextension Firefox"?

    Celui qui me trouve une bonne réponse aura toute ma gratitude! Là, je patine...

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mai 2010
    Messages : 72
    Points : 70
    Points
    70
    Par défaut
    Bon, j'ai une solution pour récupérer cet opener...
    - ouvrir la popup à partir du content script plutôt que de la popup extension (ce qui permet de lancer l'ouverture de la page "officielle" et non pas d'une page moz-extension://)
    - l'ouvrir avec window.open, qui marche dans cet environnement (tant qu'on ne tente pas d'ouvrir un moz-extension... )
    - via le content script, supprimer le contenu de cette page et le remplacer par des iframes contenant les différentes versions pour recréer ma propre page

    Dans ce cas, j'ai bien le bon window.opener. Que je peux récupérer dans les iframes avec window.parent.opener.
    Mais je trouve ça moche! Je préfèrerais que window.open appelle directement ma page de l'extension plutôt qu'une "officielle" que j'efface avant d'injecter le code de ma page...
    Surtout que ça fait un petit paquet de lignes à injecter (HTML + CSS + JS pour l'environnement hors iframes) et c'est laborieux (je n'ai sans doute pas la bonne méthode, ça fait un paquet de lignes sans coloration syntaxique à rédiger).
    Ayant trouvé un bugzilla sur le sujet, je suis peu confiant, mais si quelqu'un a une solution, merci!

    Cela pourrait répondre à la question initiale, mais je n'arrive pas à modifier le code js de la page pour remplacer "window.opener" par "window.parent.opener".
    Ce que je fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var modifFonction = $('head').children().last().html(fuction(1,html)
    {
    return html.replace("window.opener", "window.parent.opener");
    }
    Le code est bien modifié (vérifié en allant voir le code de la page de chaque iframe et en le retournant dans un console.log).
    Mais lorsqu'un clic appelle cette fonction, c'est toujours l'originale qui arrive : il chercher toujours en vain window.opener (testé aussi en modifiant le message d'alerte, c'est l'ancien qui s'affiche).
    Quelque chose m'échappe, qui peut m'aider à mettre le doigt dessus?

    PS : remplacer le clic pour appeler une fonction dans mon content script ne convient pas : les autres fonctions appelés ne sont pas dans le même contexte (donc échec).
    Et les variables (par exemple pour selectionEquipement) sont générés avec la page et propres à chaque élément, même si je peux aller les chercher (encore laborieux et sûrement pas la "bonne solution")

    Merci pour votre aide

Discussions similaires

  1. [AJAX] window.opener avec destination dynamique
    Par wighie dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 02/11/2006, 18h56
  2. Problème window.open avec IE
    Par karibouxe dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 03/10/2006, 10h37
  3. [debutant] utilisé window.open avec <form>
    Par Bayar dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 25/08/2006, 13h37
  4. window.open avec deux urls
    Par dehbi dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 22/06/2006, 10h05
  5. window.open avec parametre
    Par loleske dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 21/11/2005, 10h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo