GetElementById 在新 window 上返回 null

GetElementById returning null on a new window

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";
}

我正在尝试打开一个新的 window,并在那个新的 window 中找到一个 ID 并更改值。我刚刚使用 google 进行测试,'lst-ib' 是上面搜索栏的 id。

我知道 wait() 函数非常低效,永远 真的 不应该使用,但我是 JS 的新手,找不到任何其他方法,但它好像不是问题。

我尝试简单地设置值,但这总是 return 一个错误,指出 getElementById(...) 为 null

此外,

document.getElementById('lst-ib').value = "test";

只要进入控制台就可以工作

大多数浏览器不允许更改其他浏览器窗口中的文档。 试想一个脚本会更改您银行页面上的帐号

您应该阅读 same origin policy,它不允许 window 访问另一个 window 的内容,除非 "origins"(协议、域和端口)都一样。

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

要完成交叉 window 信息交换,您要么需要两个使用 postMessage() 的合作 windows,要么需要两个具有相同来源的 windows。没有其他解决方法。

而且,是的,你是对的,你永远不应该使用那样的轮询循环。它会阻止 window 的 Javascript 做任何其他事情。如果您绝对必须重复轮询,那么您可以使用 setTimeout()setInterval() 反复检查直到某个条件为真。这允许其他脚本在等待条件变为真时 运行 window。