1

我正在使用 Safari 6.0.5。

我打开一个新的空窗口,尝试将标题更改为“调试窗口”,没有任何反应。检查功能每 10 毫秒检查一次,它说 window.document.title 是“调试窗口”,但新的窗口标题栏仍然说它是“无标题”。

var debug_window    =   window.open('', 'debug_window', 'height=200'); 

debug_window.document.title     =   'Debug Window';

    function check() 
    {

    debugLog(1, 'title:' + debug_window.document.title);
    if(debug_window.document) { // if loaded
        debug_window.document.title = "debug_window"; // set title
    } else { // if not loaded yet
        setTimeout(check, 10); // check in another 10ms
    }
     }
     check();

debugLog 中的输出为:

17:35:04.558: title:
17:35:04.584: title:debug_window

新窗口仍然被称为“无标题”,这是怎么回事?

谢谢!

4

2 回答 2

0

现在 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()”,并将调试窗口及其文档作为参数。)

于 2013-07-14T16:01:48.230 回答
0

尝试:

var debug_window = window.open('about:blank', 'debug_window', 'height=200');
于 2015-11-12T09:37:55.143 回答