Notizie: scarica ora l'ultima versione disponibile di Firefox!

Autore Topic: Impedire apertura più popup  (Letto 1460 volte)

0 Utenti e 2 Visitatori stanno visualizzando questo topic.

Offline GogetaSsj

  • Post: 14
Impedire apertura più popup
« il: 24 Novembre 2010 20:21:18 »
Sto cercando di creare un'estensione firefox la quale, una volta premuto il bottone presente sulla barra degli strumenti, permette di aprire una finestra popup. Vorrei però che quando la finestra popup è già aperta e si cerca di premere di nuovo il bottone, non venga aperta un'altra finestra ma venga visualizzata la stessa finestra aperta la prima volta e che non è stata ancora chiusa. Come potrei fare?

Offline klades

  • Moderatore
  • Post: 5788
    • http://www.nic-nac-project.org/~kaosmos
Re: Impedire apertura più popup
« Risposta #1 il: 24 Novembre 2010 20:35:59 »

Offline GogetaSsj

  • Post: 14
Re: Impedire apertura più popup
« Risposta #2 il: 25 Novembre 2010 10:59:34 »
Mi sapresti dare un esempio di come potrei usare l'istruzione getMostRecentWindow?? Ho visto i due esempi che stanno in quella pagina ma non mi sono molto chiari. Io ho una finestra e la apro con window.open. all'inizio dichiaro var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator);  ma poi quando devo effettuare la verifica e cosa gli devo passare per type?????

Offline klades

  • Moderatore
  • Post: 5788
    • http://www.nic-nac-project.org/~kaosmos
Re: Impedire apertura più popup
« Risposta #3 il: 25 Novembre 2010 11:04:13 »
La finestra che apri è una pagina html o xul o cos'altro?

Offline GogetaSsj

  • Post: 14
Re: Impedire apertura più popup
« Risposta #4 il: 25 Novembre 2010 11:09:50 »
E' una pagina html, la apro con questa istruzione
Codice: [Seleziona]

popup = window.open( "chrome://tagrecommender/content/tag.htm", "TagRecommender", "status = 1, height = "+ popupHeight +", width = "+ popupWidth +", resizable = 1, scrollbars=yes,top="+intTop+",left="+intLeft );

Offline klades

  • Moderatore
  • Post: 5788
    • http://www.nic-nac-project.org/~kaosmos
Re: Impedire apertura più popup
« Risposta #5 il: 25 Novembre 2010 11:15:54 »
Penso che il modo migliore sia esaminare tutte le finestre di tipo "browser" che sono aperte con nsIWindowMediator.getEnumerator("navigator:browser") e controllare l'indirizzo di ogni finestra.
Quando trovi quella che ha come indirizzo "chrome://tagrecommender/content/tag.htm" hai trovato la finestra che ti serve.

Offline GogetaSsj

  • Post: 14
Re: Impedire apertura più popup
« Risposta #6 il: 25 Novembre 2010 11:23:47 »
Quindi una cosa del genere andrebbe bene da mettere prima che la finestra venga aperta e che faccia il controllo ogni volta che si preme il bottone dell'estensione firefox:

Codice: [Seleziona]
var enumerator = wm.getEnumerator("navigator:browser");  
    while(enumerator.hasMoreElements()) {  
      var win = enumerator.getNext();  
 if win == "chrome://tagrecommender/content/tag.htm";
 window.focus(popup);
      // win is [Object ChromeWindow] (), do something with it  
    }  


Edit: ho provato ma così non la apre anche se non è stata aperta in precedenza.
« Ultima modifica: 25 Novembre 2010 11:26:13 da GogetaSsj »

Offline klades

  • Moderatore
  • Post: 5788
    • http://www.nic-nac-project.org/~kaosmos
Re: Impedire apertura più popup
« Risposta #7 il: 25 Novembre 2010 11:34:49 »
Beh il tuo codice ha qualche errore...prova questo, dovrebbe automaticamente mettere il focus sulla finestra aperta con il tuo popup, se questa esiste.

Codice: [Seleziona]
var enumerator = wm.getEnumerator("navigator:browser");  
var myWin = null;
while(enumerator.hasMoreElements() && !myWin) {  
   var win = enumerator.getNext();  
   if (win.location.href == "chrome://tagrecommender/content/tag.htm")
       myWin =  win;
}
if (myWin)
       myWin.focus();

Ah, ovviamente questo serve solo a trovare la finestra aperta, per aprirla devi sempre usare window.open.

Offline GogetaSsj

  • Post: 14
Re: Impedire apertura più popup
« Risposta #8 il: 25 Novembre 2010 11:54:41 »
Qualcosa continua a non funzionare, continua ad aprirne tante. Questo è tutto il codice che uso per aprire la finestra, tieni conto che faccio un controllo per far in modo che il popup mi si apra solo su determinate pagine internet non su tutte.

Codice: [Seleziona]
function LoadTagRecommender(){
var mainWindow = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
                   .getInterface(Components.interfaces.nsIWebNavigation)
                   .QueryInterface(Components.interfaces.nsIDocShellTreeItem)
                   .rootTreeItem
                   .QueryInterface(Components.interfaces.nsIInterfaceRequestor)
                   .getInterface(Components.interfaces.nsIDOMWindow);
var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]  
                   .getService(Components.interfaces.nsIWindowMediator);
    var enumerator = wm.getEnumerator("navigator:browser");  
    var myWin = null;
    

var URLCorrente = mainWindow.getBrowser().selectedBrowser.contentWindow.location.href;
        var siteurl = URLCorrente.split("/");
var xpath= "";
var single = false;


if ( mainWindow.getBrowser().selectedBrowser.contentWindow.location.href.indexOf("issues/entry")!=-1|| mainWindow.getBrowser().selectedBrowser.contentWindow.location.href.indexOf("issues/bulkedit?ids=")!=-1) {
            while(enumerator.hasMoreElements() && !myWin) {  
                var win = enumerator.getNext();  
                if (win.location.href == "chrome://tagrecommender/content/tag.htm")
                myWin =  win;
            }
            if (myWin)
             myWin.focus();
    else{
                 num = siteurl.length-3;
nameproject = siteurl[num];
intLeft = screen.availWidth - 40 - popupWidth;
intTop = (screen.availHeight / 2) - (popupHeight / 2);
popup = window.open( "chrome://tagrecommender/content/tag.htm", "TagRecommender", "status = 1, height = "+ popupHeight +", width = "+ popupWidth +", resizable = 1, scrollbars=yes,top="+intTop+",left="+intLeft );      
}} else {
alert("This plugin works only for adding a new ticket\n"+
     "or editing a ticket .");
}
}



Ho inserito il while nell'if, prima ho provato anche fuori dall'if, ma il risultato non cambia, mi apre sempre più finestre. Esegue sempre e cmq ad ogni clic il comando window.open. Ho provato ad inserire un else nel caso in cui non trovasse la finestra , ma niente apre sempre la finestra.
« Ultima modifica: 25 Novembre 2010 11:56:35 da GogetaSsj »

Offline klades

  • Moderatore
  • Post: 5788
    • http://www.nic-nac-project.org/~kaosmos
Re: Impedire apertura più popup
« Risposta #9 il: 25 Novembre 2010 12:09:23 »
Mi è venuto un dubbio: prova a mettere

Codice: [Seleziona]
if (win.content.location.href == "chrome://tagrecommender/content/tag.htm")

Se anche così non va, ti consiglio di mettere un po' di alert nel codice per avere più elementi per fare il debug.


Offline GogetaSsj

  • Post: 14
Re: Impedire apertura più popup
« Risposta #10 il: 25 Novembre 2010 12:15:36 »
Immensamente grazie :D senza di te non ci sarei arrivato mai :) adesso funziona

Offline GogetaSsj

  • Post: 14
Re: Impedire apertura più popup
« Risposta #11 il: 30 Novembre 2010 23:31:20 »
Scusa se riapro questa discussione, ma ho una domanda strettamente collegata. Adesso che non apro altre finestre se premo sul bottone dell'estensione, vorrei sapere se fosse possibile far in modo che cliccando sul bottone il contenuto della finestra si aggiornasse. Ovvero se premo una volta sul bottone si apre la finestra, e finché non la chiudo, premendo sullo stesso ritorno alla finestra stessa. E' possibile far in modo che premendo il bottone la pagina venga ricaricata in modo da azzerare i risultati forniti fino a quel momento invece di doverla chiudere e richiamare col bottone???

Offline klades

  • Moderatore
  • Post: 5788
    • http://www.nic-nac-project.org/~kaosmos
Re: Impedire apertura più popup
« Risposta #12 il: 02 Dicembre 2010 16:51:21 »
Beh, seguendo il ragionamento che abbiamo fatto prima, l'oggetto "win.content" fa riferimento a quella finestra, quindi puoi farci quello che vuoi (per esempio chiamare la funzione "reload", oppure azzerare i campi manipolando direttamente i suoi elementi).

0 Utenti e 2 Visitatori stanno visualizzando questo topic.