2016-11-22 5 views
0

Ich erstelle ein Firefox-Addon mit xul. Ich habe einen dynamischen iFrame mit dem folgenden Skript hinzugefügt:PostMessage funktioniert nicht mit dynamisch hinzugefügtem iframe in Firefox Addon mit 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); 

Das obige Skript fügt erfolgreich einen neuen iFrame auf der Seite hinzu. Jetzt möchte ich Nachrichten von iframe zu meinem Addon erhalten. Ich habe ein Ereignis in iframe postmessage Skript, Skript wie folgt erstellt:

//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> 

Aber ich bin nicht in der Lage Nachricht in meinem Firefox AddOn zu erhalten.

Kann jemand helfen?

+0

Wir müssen wissen, was 'window' in Ihrem ersten Codeblock ist (d. H. Sie haben' var window = ?? was ??; ') und' parent' in Ihrem zweiten Codeblock. – Makyen

+0

Nur zu Ihrer Information: Es ist ziemlich unwahrscheinlich, dass Sie ein Add-On für die Verteilung auf AMO erhalten, wenn Sie eine HTML-Datei für ein Teil verwenden, die nicht mit Ihrem Add-on geliefert wird (dh eine Komponente aus einer webbasierten Quelle) Ihrer Benutzeroberfläche. – Makyen

+0

Bitte geben Sie Ihre HTML-Datei an (oder mindestens eine, die Ihre Schaltflächen enthält), damit wir den erforderlichen Code haben, um dies zu testen (d. H. A [mcve]). – Makyen

Antwort

0

Lösung ist:

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

Dieses Skript nur dynamische iframe hinzugefügt werden kann, auf der Seite nach der Zugabe.

Verwandte Themen