Javascript document.title在Safari中不起作用

时间:2013-07-14 15:37:30

标签: javascript safari title

我正在使用Safari 6.0.5。

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

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

新窗口仍被称为“无标题”,这会出现什么问题?

谢谢!

2 个答案:

答案 0 :(得分: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()” 。)

答案 1 :(得分:0)

尝试:

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