【发布时间】:2015-07-16 04:11:48
【问题描述】:
我使用 javascript window.open()打开一个窗口
打开的窗口有以下代码:
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);
});
现在此代码在“lang”选择菜单更改时触发。我使用window.open 以编程方式打开窗口,并设法使用Window.executeScript() 将数据填充到窗口字段中。例如,这对我有用:
loginWindow.executeScript({
code: "jQuery('input#username').val('10500050')"
});
但是,当我尝试按照相同的逻辑更改 selectMenu 中名为“lang”的所选项目的同一窗口时,我失败了。
尝试
我在executeScript 中尝试了以下所有行;
code: "$('#lang').val('ms')"
code: "jQuery('#lang option[value=ms]').prop('selected', true)"
code: "jQuery('#lang').selectmenu('value', 'ms')"
用这些在接下来的executeScript 触发改变
code: "$('#lang').trigger('change')"
code: "$('#lang').selectmenu('refresh', true)"
code: "jQuery('#lang').selectmenu('refresh')"
code: "jQuery('#lang').selectmenu('change')"
code: "$('#lang').change()"
他们都没有帮助。我不确定是否应该将它们合并为一个executeScript。我不知道如何去做。打开的窗口来自不同的域。
我错过了什么吗?
opener端的完整代码如下:
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();
}
});
});
});
前两个executeScript 工作正常。但是最后两个(selectMenu 部分)不起作用。什么都没有发生。
更新
当将此代码添加到窗口本身时,它会起作用并且选择框的值会更改:
jQuery("#lang option[value='zh-TW']").attr("selected","selected");
jQuery('#lang').change();
但是,当我将它添加到父窗口(打开器)的executeScript 中时,它不起作用!
【问题讨论】:
-
您应该能够通过使用分号分隔命令来将所有这些 executeScript 调用放在一起。我认为这无论如何都不能解决问题。
-
@jlreymendez 分号对我不起作用,但逗号起作用。感谢您指出可能性
标签: javascript jquery events dom triggers