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

时间:2014-08-26 13:09:08

标签: javascript html

我有一个父html文件,并希望用户点击一些内容,然后打开一个新窗口(或标签),其中包含父项中div的(动态生成的)内容(隐藏在父项中)。 / p>

从我在这里和其他地方的阅读中,这样的事情应该有效:

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>

child.html

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

        <script type="text/javascript">
            function addHTML(html) {
                $('#to').html(html);
            }
        </script>
    </body>
</html>

但是,无论使用已注释掉的setTimeout(在调用孩子的函数之前还没有加载孩子),我会立即收到此错误(在Safari中,在Chrome中类似):< / p>

'undefined' in not a function (evaluating 'child.addHTML(html)')

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

2 个答案:

答案 0 :(得分:1)

window.setTimeout的第一个参数应该是要执行的函数。

试试这个:

        if (child) {
            var html = $("#from").html();
            window.setTimeout(function(){child.addHTML(html);}, 5000);
        }

我建了一个小例子:: http://jsfiddle.net/rt19hv7v/

答案 1 :(得分:1)

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

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