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!
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
@jlreymendez il punto e virgola non ha funzionato per me, ma la virgola ha funzionato. Grazie per sottolineare la possibilità – Hawk