2016-11-22 4 views
0

Я создаю аддон firefox с помощью xul. Я добавил динамический IFRAME, используя следующий скрипт:postMessage не работает с динамически добавленным iframe в Firefox-аддоне с помощью 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); 

Выше сценарий успешно добавление нового IFRAME на странице. Теперь я хочу получать сообщения из iframe в свой аддон. Я создал событие PostMessage в IFrame сценария, сценарий следующим образом:

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

Но я не могу получить сообщение в моем FireFox аддон.

Может ли кто-нибудь помочь?

+0

Нам нужно знать, что именно «окно» находится в вашем первом блоке кода (т. Е. Вы сделали «var window = ?? what ??;') и «parent» в своем втором блоке кода. – Makyen

+0

Просто FYI: Маловероятно, что вы получите надстройку, одобренную для распространения на AMO, если вы используете HTML-файл, который не поставляется с вашим надстройкой (то есть с веб-источником) для части вашего пользовательского интерфейса. – Makyen

+0

Просьба представить ваш HTML-файл (или, по крайней мере, один из них с вашими кнопками), поэтому у нас есть код, необходимый для проверки этого (т. Е. [Mcve]). – Makyen

ответ

0

Решение:

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

Этот сценарий может быть добавлен только после добавления динамического IFRAME на странице.

Смежные вопросы