2015-05-06 12 views
6

apro una finestra utilizzando JavaScript window.open()opzione Modifica Selezionare Menu di programmazione in figlio inAppBrowser

La finestra che si apre ha il seguente codice:

jQuery(document).ready(function(){ 
    jQuery("#lang").change(function(){ 
     var lname = jQuery(this).val().split("-"); 
     window.location = '<?php echo JURI::root();?>index.php?lang='+lname[0]; 
     alert(lname[0]); 
     alert('lang '+lang); 
    }); 

Ora questo codice viene attivato su selezionare cambio di menu 'lang'. Apro la finestra programmaticamente usando window.open e sono riuscito a popolare i dati nei campi della finestra usando Window.executeScript(). Per esempio, questo funziona per me:

loginWindow.executeScript({ 
    code: "jQuery('input#username').val('10500050')" 
}); 

Tuttavia, quando ho cercato di seguire la stessa logica per cambiare l'elemento selezionato in Selezionare Menu chiamato 'lang' per la stessa finestra, ho fallito.

Tentativi

Ho provato tutte le righe seguenti executeScript;

code: "$('#lang').val('ms')" 
code: "jQuery('#lang option[value=ms]').prop('selected', true)" 
code: "jQuery('#lang').selectmenu('value', 'ms')" 

con questi nella prossima executeScript per innescare il cambiamento

code: "$('#lang').trigger('change')" 
code: "$('#lang').selectmenu('refresh', true)" 
code: "jQuery('#lang').selectmenu('refresh')" 
code: "jQuery('#lang').selectmenu('change')" 
code: "$('#lang').change()" 

Nessuno di loro ha aiutato. Non sono sicuro se dovrei combinarli in uno executeScript. Non so come farlo. La finestra che si apre proviene da un dominio diverso.

Mi manca qualcosa qui?

L'intero codice sul lato di apertura è il seguente:

loginWindow.addEventListener('loadstop', function() { 
    alert('test'); 
    var loop = setInterval(function() { 
     loginWindow.executeScript({ 
      code: "jQuery('input#username').val('10500050')" 
      }, 
      function(values) { 
      var give = values[ 0 ]; 
      if (give) { 
       clearInterval(loop); 
       giveMeUsername(); 
       } 
      }); 

     loginWindow.executeScript({ 
      code: " jQuery('input#name').val('10500050')" 
      }, 
      function(values) { 
       var give = values[ 0 ]; 
        if (give) { 
        clearInterval(loop); 
        giveMeUsername(); 
        } 
      }); 

     loginWindow.executeScript({ 
      //code: "$('#lang').val('zh')" 
      //code: "jQuery('#lang option[value=ms]').prop('selected', true)" 
      code: "jQuery('#lang').selectmenu('value', 'ms')" 
      //code: "localStorage.setItem('lan', 'ms')" 
      }, 
      function(values) { 
       var give = values[ 0 ]; 
       if (give) { 
       clearInterval(loop); 
       giveMeUsername(); 
       } 
      }); 

     loginWindow.executeScript({ 
     //code: "$('#lang').trigger('change')" 
     //code: "$('#lang').selectmenu('refresh', true)" 
     //code: "jQuery('#lang').selectmenu('refresh')" 
     //code: "jQuery('#lang').selectmenu('change')" 
     code: "$('#lang').change()" 
     }, 
     function(values) { 
      var give = values[ 0 ]; 
      if (give) { 
       clearInterval(loop); 
       giveMeUsername(); 
      } 
      });       
    }); 
}); 

I primi due executeScript funzionano bene. Ma gli ultimi due (selectMenu part) non funzionano. Non succede nulla

UPDATE

Quando aggiungere questo codice alla finestra stessa, funziona e il valore della casella di selezione è cambiato:

jQuery("#lang option[value='zh-TW']").attr("selected","selected"); 
jQuery('#lang').change(); 

Tuttavia, quando lo aggiungo all'interno executeScript nella finestra padre (apri), non funziona!

+0

Dovresti riuscire a mettere tutte le chiamate executeScript insieme separando i comandi usando i punti e virgola. Non penso che questo risolverebbe comunque il problema. – jlreymendez

+1

@jlreymendez il punto e virgola non ha funzionato per me, ma la virgola ha funzionato. Grazie per sottolineare la possibilità – Hawk

risposta

1

Poiché il codice funziona quando lo incollo direttamente nella finestra secondaria all'interno di jQuery(document).ready(function(), ho presupposto che dovrebbe funzionare dalla finestra padre utilizzando executeScript. Dopo molti esperimenti di prova ed errore, il seguente codice ha funzionato per me:

    loginWindow.executeScript(
         { 
          code: "jQuery('#lang option[value=zh-TW]').attr('selected','selected'), jQuery('#lang').change()"        
         }); 

Quale è lo stesso codice ho già detto nella parte "Update" della mia domanda, tranne la differenza di apice singolo e doppio preventivo. Qui usando executeScript, ho dovuto manipolare per usare la doppia citazione solo per racchiudere l'intero codice iniettato, il resto uso la citazione singola.

Il codice sopra riportato consente di modificare l'opzione selezionata nella casella di selezione nella finestra secondaria utilizzando il metodo executeScript nella finestra padre (apertura).

Problemi correlati