2016-11-22 4 views
0

Je crée un addon firefox en utilisant xul. J'ai ajouté un iframe dynamique à l'aide script suivant:postMessage ne fonctionne pas avec iframe ajouté dynamiquement dans l'addon firefox en utilisant xul

//addon script: 
let chromeUrl = 'https://myserver/downloadProduct.html'; 
         Components.utils.import('resource://gre/modules/Services.jsm');//Services 
         let activeWindow = Services.wm.getMostRecentWindow('navigator:browser'); 

         let mainDocument = activeWindow.document; 

         let iframeEl; 
         iframeEl = mainDocument.createElement('iframe'); 

         iframeEl.id = "d"; 
         iframeEl.setAttribute('src',chromeUrl); 
         iframeEl.setAttribute("tooltip", "aHTMLTooltip"); 
         iframeEl.setAttribute("autocompleteenabled", true); 
         iframeEl.setAttribute("autocompletepopup", "PopupAutoComplete"); 
         iframeEl.setAttribute("disablehistory",true); 
         iframeEl.setAttribute('type', 'content'); 
         iframeEl.setAttribute('height', '32px'); 


         window.document.documentElement.insertBefore(iframeEl, window.document.documentElement.window); 
window.addEventListener("message", receiveMessage,false); 

script ci-dessus ajoute avec succès une nouvelle iframe à la page. Maintenant, je veux recevoir des messages de iframe à mon addon. J'ai créé un événement postMessage dans le script iFrame, script comme suit:

//iFrame Script: 
<script type="text/javascript"> 
     $(document).ready(function() { 
      $("#Download").click(function() { 
       parent.postMessage({ Action: "DOWNLOADED", Result: null }, "*"); 
      }) 

      $("#NotNow").click(function() { 
       parent.postMessage({ Action: "NOT_NOW", Result: null }, "*"); 
      }) 

      $("#Never").click(function() { 
       parent.postMessage({ Action: "DO_NOT_SHOW", Result: null }, "*"); 
      }) 
     }); 
    </script> 

Mais je ne suis pas en mesure de recevoir un message dans mon addon firefox.

Quelqu'un peut-il aider?

+0

Nous allons avoir besoin de savoir quelle 'window' est dans votre premier bloc de code (c'est-à-dire que vous avez fait' var window = ?? what ??; ') et' parent' dans votre deuxième bloc de code. – Makyen

+0

Juste pour info: Il est assez improbable que vous obteniez que votre add-on soit approuvé pour la distribution sur AMO si vous utilisez un fichier HTML qui n'est pas fourni avec votre add-on (ie provenant d'une source web) de votre interface utilisateur. – Makyen

+0

Veuillez fournir votre fichier HTML (ou au moins un fichier contenant vos boutons) afin que nous ayons le code nécessaire pour le tester (c'est-à-dire un [mcve]). – Makyen

Répondre

0

Solution est:

window.document.getElementById("iframeId").contentWindow.document.getElementById("elementId").addEventListener('click', function() { 
           //Do something 
          }, false); 

Ce script peut être ajouté juste après avoir ajouté iframe dynamique sur la page.