2012-05-28 116 views
0

我試圖在進入網站時實現'追蹤窗口'彈出窗口,然後將消息發送到整個網站的窗口,以診斷我有一些更尷尬的問題與該網站。 問題是頁面發生變化,如果跟蹤窗口已經存在,則在添加新的TraceText之前刪除所有內容。 我想要的是一個窗口,可以從網站內的任何頁面發送消息。彈出窗口不會追加文字

我有一個JavaScript腳本debugger.js,我將其作爲腳本包含在每個屏幕中(如下所示)然後我會調用sendToTraceWindow()函數在整個網站中向其發送消息。這是目前大部分在vbscript中完成,由於我正在調查的問題。 我認爲這是因爲我正在將debugger.js編寫到每個屏幕中,它將traceWindow變量設置爲null(請參閱下面的代碼),但我不知道如何解決此問題!

任何幫助非常感謝。 安德魯

代碼示例:

debugger.js

var traceWindow = null 

function opentraceWindow() 
{ 
    traceWindow = window.open('traceWindow.asp','traceWindow','width=400,height=800') 
} 

function sendToTracewindow(sCaller, pMessage) 
{ 

    try 
    { 
     if (!traceWindow) 
     { 
     opentraceWindow() 
     } 

     if (!traceWindow.closed) 
     { 
     var currentTrace = traceWindow.document.getElementById('trace').value 
     var newTrace = sCaller + ":" + pMessage + "\n" + currentTrace 
     traceWindow.document.getElementById('trace').value = newTrace 
     } 
    } 
    catch(e) 
    { 
     var currentTrace = traceWindow.document.getElementById('trace').value 
     var newTrace = "error tracing:" + e.message + "\n" + currentTrace 
     traceWindow.document.getElementById('trace').value = newTrace 
    } 

} 

traceWindow.asp - 只是一個ID = '追蹤' 的textarea:

<HTML> 
    <head> 
     <title>Debug Window</title> 
    </head> 
    <body> 
     <textarea id="trace" rows="50" cols="50"></textarea> 
    </body> 
</HTML> 
+0

你想再次追蹤什麼?要診斷哪種類型的錯誤? –

+0

不是一定的錯誤,但任何我可能會覺得有用的跟蹤:)。例如,我可能想在TraceWindow中顯示String sStatus是什麼時候的特定時間,所以可能會調用sendToTraceWindow(「window_onmousemove」,iStatus)或者當某人按下'Save'按鈕時,我會記錄That traceWindow sendToTraceWindow(「save_mouseup」,「保存按鈕按下」)。所以不是錯誤 - 只是我可能發現錯誤的文本。 –

回答

1

我不要認爲你的traceWindow變量會被重置在每個頁面加載,因此呈現您的句柄到現有的窗口無效。但是,如果您不介意利用LocalStorage和一些jQuery,我相信您可以實現您正在尋找的功能。

您的跟蹤窗口改成這樣:

<html> 
    <head> 
     <title>Debug Window</title> 
     <script type="text/javascript" src="YOUR_PATH_TO/jQuery.js" /> 
     <script type="text/javascript" src="YOUR_PATH_TO/jStorage.js" /> 
     <script type="text/javascript" src="YOUR_PATH_TO/jquery.json-2.2.js" /> 
     <script type="text/javascript"> 
     var traceOutput; 
     var traceLines = []; 
     var localStorageKey = "traceStorage"; 

     $(function() { 
      // document.ready. 
      // Assign the trace textarea to the global handle. 
      traceOutput = $("#trace"); 
      // load any cached trace lines from local storage 
      if($.jStorage.get(localStorageKey, null) != null) { 
      // fill the lines array 
      traceLines = $.jStorage.get(localStorageKey); 
      // populate the textarea 
      traceOutput.val(traceLines.join("\n")); 
      } 
     }); 

     function AddToTrace(data) { 
      // append the new trace data to the textarea with a line break. 
      traceOutput.val(traceOutput.val() + "\n" + data); 
      // add the data to the lines array 
      traceLines[tracelines.length] = data; 
      // save to local storage 
      $.jStorage.set(localStorageKey, traceLines); 
     } 

     function ClearTrace() { 
      // empty the textarea 
      traceOutput.val(""); 
      // clear local storage 
      $.jStorage.deleteKey(localStorageKey); 
     } 
     </script> 
    </head> 
    <body> 
     <textarea id="trace" rows="50" cols="50"></textarea> 
    </body> 
</html> 

而且,在你想跟蹤數據您的網頁,你可以修改你的JavaScript像這樣:

var traceWindow = null;     
function opentraceWindow() {      
    traceWindow = window.open('traceWindow.asp','traceWindow','width=400,height=800'); 
} 

function sendToTracewindow(sCaller, pMessage) { 
    traceWindow.AddToTrace(sCaller + ":" + pMessage); 
} 

每當一個新的頁面被加載並且跟蹤窗口被刷新,現有的跟蹤數據從本地存儲中加載並顯示在你的textarea中。這應該實現您正在尋找的功能。

請善待任何錯誤 - 我在星期一早上收到這一點!

尋找jQuery庫應該是微不足道的。你可以在這裏找到jStorage庫:http://www.jstorage.info/,你可以在這裏找到jquery-json:http://code.google.com/p/jquery-json/

+0

非常好謝謝布拉德。它只會在開發環境中「開啓」,所以我對本地存儲沒有任何問題。看起來像一個很好的解決方案。我之前沒有使用jquery,所以我會放棄它! –