2013-07-14 41 views
0

我使用Safari 6.0.5。的Javascript document.title時不工作在Safari

我打開一個新的空窗口,嘗試將標題更改爲「調試窗口」,沒有任何反應。隨着檢查功能檢查每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 

這是怎麼回事錯在這裏,新的窗口仍然被稱爲「無」?

謝謝!

+0

'debug_window.document.getElementsByTagName( 「標題」)[0] .childNodes [0] .nodeValue =「調試窗口」;';)或先創建標題元素,然後將其追加 – Givi

+0

嘗試...... http://jsfiddle.net/GKDev/93QFk/ – Givi

+0

@Givi,還在說在你的鏈接名字。 .. – MiiChiel

回答

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 
}; 

和服務器端類似

如果仍然不能正常工作(例如:寫入調試窗口的文件是沒有效果),你可以從內部調用您的應用程序調試窗口中是這樣的:

<body onload="if (window.opener && !window.opener.closed) window.opener.debugCallback(window, window.document);"> 
</body> 

(所以,你會檢查首戰 - 你的應用程序 - 存在,並沒有在此期間被關閉,然後再調用回調函數「debugCal lback()」與調試窗口及其作爲參數文件的應用程序)

+0

謝謝,您的代碼在Chrome中運行,但不在Safari中運行。大概野生動物園是瓶頸... – MiiChiel

+1

剛試過這個我自己,野生動物園似乎是一個特殊的品種在這裏。通過DOM檢查標題顯示正確的標題,但不會顯示在窗口的標題欄中。 - 您可以嘗試使用基本HTML(包括標題)加載文檔,並在加載後立即將其內容注入其主體。 – masswerk

0

嘗試:

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

請考慮編輯您的帖子以添加更多關於您的代碼的解釋以及爲什麼它可以解決問題。一個主要包含代碼的答案(即使它正在工作)通常不會幫助OP瞭解他們的問題。如果這只是猜測,也建議您不要發佈答案。一個好的答案會有一個合理的理由解釋爲什麼它可以解決OP的問題。 – SuperBiasedMan