Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript GetElementById在新窗口上返回null_Javascript_Getelementbyid_Window.open - Fatal编程技术网

Javascript GetElementById在新窗口上返回null

Javascript GetElementById在新窗口上返回null,javascript,getelementbyid,window.open,Javascript,Getelementbyid,Window.open,我试图打开一个新窗口,在新窗口中找到一个id并更改值。我刚刚使用谷歌进行测试,“lst ib”是它上面搜索栏的id 我知道wait()函数效率非常低,不应该真正使用它,但我对JS是新手,找不到其他方法,但这似乎不是问题所在 我试图简单地设置该值,但这总是会返回一个错误,即getElementById(…)为null 而且 只要进入控制台,大多数浏览器都不允许更改其他浏览器料堆中的文档。 想象一下,一个脚本将更改您银行页面上的账号,您应该了解到,该脚本不允许一个窗口访问另一个窗口的内容,除非“来源

我试图打开一个新窗口,在新窗口中找到一个id并更改值。我刚刚使用谷歌进行测试,“lst ib”是它上面搜索栏的id

我知道wait()函数效率非常低,不应该真正使用它,但我对JS是新手,找不到其他方法,但这似乎不是问题所在

我试图简单地设置该值,但这总是会返回一个错误,即getElementById(…)为null

而且


只要进入控制台,大多数浏览器都不允许更改其他浏览器料堆中的文档。 想象一下,一个脚本将更改您银行页面上的账号,您应该了解到,该脚本不允许一个窗口访问另一个窗口的内容,除非“来源”(协议、域和端口)相同

如果您的另一个窗口是
http://www.google.com
并且运行此代码的窗口不同,那么浏览器将简单地阻止您的访问。它不会让您看到其他文档的内部

要完成跨窗口的信息交换,您需要使用
postMessage()
的两个协作窗口或两个具有相同来源的窗口。没有其他解决办法

是的,你是正确的,你不应该使用这样的轮询循环。它将阻止该窗口的Javascript执行任何其他操作。如果绝对必须重复轮询,则可以使用
setTimeout()
setInterval()
反复检查,直到某个条件为真。这允许其他脚本在该窗口中运行,同时等待条件变为真

function wait(w, id) {
    while (w.document.getElementById(id) == null) {
        console.log('waiting');
    }
    return true;        
}

var openWindow = window.open("http://www.google.com/?gws_rd=ssl", width=200, height=400);
if (wait(openWindow, 'lst-ib')) {
    openWindow.document.getElementById('lst-ib').value = "test";
}
document.getElementById('lst-ib').value = "test";