我有一个父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)')
我做错了什么?有没有更好的方法来实现我的目标?
答案 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');
}