如何在打开的子窗口中调用javascript函数

如何在打开的子窗口中调用javascript函数,javascript,html,Javascript,Html,我有一个父html文件,希望用户单击某个内容,然后打开一个新窗口(或选项卡),其中包含父目录中div的(动态生成的)内容(隐藏在父目录中) 从我在这里和其他地方的阅读来看,类似的东西应该是可行的: parent.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>Parent</title>

我有一个父html文件,希望用户单击某个内容,然后打开一个新窗口(或选项卡),其中包含父目录中div的(动态生成的)内容(隐藏在父目录中)

从我在这里和其他地方的阅读来看,类似的东西应该是可行的:

parent.html

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>Parent</title>
        <script src="/js/jquery-1.11.0.min.js"></script>
    </head>
    <body>
        <div id="from">
            html from parent
        </div>

        <div id="launcher">
            launch child
        </div>

        <script type="text/javascript">
            $("#launcher").click(function() {
                var child = window.open('child.html', '_blank', '', false);
                if (child) {
                    var html = $("#from").html();
                    //window.setTimeout(child.addHTML(html), 5000);
                    child.addHTML(html);
                }
                else {
                    alert('Please allow popups for this site');
                }
            });
        </script>
    </body>
</html>

我做错了什么?有更好的方法来实现我的目标吗?

窗口的第一个参数。setTimeout应该是要执行的函数

试试这个:

        if (child) {
            var html = $("#from").html();
            window.setTimeout(function(){child.addHTML(html);}, 5000);
        }
我建立了一个小例子:

如果目标只是添加内容,而不是调用函数,您可以这样做

if (child) {
    child.addEventListener('load', function () {
        var html = $("#from").html();
        $('#to',child.document).html(html)
    });
}else {
    alert('Please allow popups for this site');
}

这不是问题所在,但那样调用
setTimeout()
不会有任何好处。您要求在5秒内调用
child.addHTML()
的结果<将立即调用code>child.addHTML(),以获取结果。这样可以。。。现在有没有一种方法可以做到这一点,而不用猜测要使用什么超时,或者等待的时间太长,或者不够长?是的,您可以使用child.addEventListener('eventname',function(){…},true);我已经更新了JSFIDLE:
        if (child) {
            var html = $("#from").html();
            window.setTimeout(function(){child.addHTML(html);}, 5000);
        }
if (child) {
    child.addEventListener('load', function () {
        var html = $("#from").html();
        $('#to',child.document).html(html)
    });
}else {
    alert('Please allow popups for this site');
}