现在 window.open() 的第二个参数是一个框架/窗口名称,也用作默认标题。这最终会被加载到此窗口中的文档覆盖。打开文档流并插入一个基本的 html 文档应该可以达到以下目的:
var debug_window = window.open('', 'debug_window', 'height=200');
debug_window.document.open();
debug_window.document.write('<!DOCTYPE html>\n<html lang="en">\n<head>\n<title>Debug Window</title>\n</head>\n<body></body>\n</html>');
debug_window.document.close();
var debug_body = debug_window.document.getElementsByTagName('body')[0];
// write to debug_window
debug_body.innerHTML = '<p>Message</p>';
因此,您将在窗口内设置一个基本文档,就像服务器加载它一样(通过写入“文档流”)。然后,您将开始像处理其他任何文档一样操作此文档。
编辑:在 Safari 中也不起作用。
其他建议:在服务器上设置一个基本文档(包括标题)并在加载时将内容注入其正文。作为奖励,您可以通过样式表设置 CSS。
var debug_window = window.open('debug_template.html', 'debug_window', 'height=200');
debug_window.onload = function() {
var debug_body = debug_window.document.getElementsByTagName('body')[0];
debug_body.innerHTML = '...';
// or
// var el = document.createElement('p');
// p.innerHTML = '...';
// debug_body.appendChild(p);
debug_window.onload=null; // clean up cross-reference
};
在服务器端类似
<!DOCTYPE html>
<html lang="en">
<head>
<title>Debug Window</title>
<link rel="stylesheet" href="debug_styles.css" type="text/css" />
</head>
<body></body>
</html>
如果这仍然不起作用(例如:写入调试窗口的文档无效),您可以通过以下方式从调试窗口内部调用您的应用程序:
<body onload="if (window.opener && !window.opener.closed) window.opener.debugCallback(window, window.document);">
</body>
(因此,您将检查开启程序(您的应用程序)是否存在并且在此期间尚未关闭,然后在您的应用程序中调用回调函数“debugCallback()”,并将调试窗口及其文档作为参数。)