2012-05-28 2 views
0

Я пытаюсь внедрить всплывающее окно «Trace Window», когда я вхожу на веб-сайт, а затем отправляю сообщения в это окно по всему веб-сайту в порядке, чтобы диагностировать некоторые из более неудобных проблем, которые у меня есть с сайтом. Проблема в том, что страница изменяется, если окно трассировки уже существует, все содержимое удаляется до добавления нового TraceText. Что я хочу - это окно, которое можно отправлять сообщениям с любой страницы внутри веб-сайта.Всплывающее окно, не добавляющее текст

У меня есть javascript Script 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 - просто TextArea с ID = 'след':

<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), или, может быть, когда кто-то нажимает кнопку «Сохранить», я бы зарегистрировал это для traceWindow sendToTraceWindow («save_mouseup», «Сохранить кнопку нажата»). Поэтому не ошибки - просто текст, который может оказаться полезным в поиске ошибок. –

ответ

1

I не думайте, что есть какой-то способ вокруг того, что ваша переменная 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); 
} 

Каждый раз, когда новая страница загружается, а окно трассировки обновляется, существующие данные трассировки загружаются из локального хранилища и отображаются в вашем текстовом поле. Это должно обеспечить функциональность, которую вы ищете.

Пожалуйста, будьте любезны с любыми ошибками - я делаю это в понедельник утром!

Поиск библиотеки jQuery должен быть тривиальным. Вы можете найти библиотеку jStorage здесь: http://www.jstorage.info/, и вы можете найти jquery-json здесь: http://code.google.com/p/jquery-json/

+0

Отлично Спасибо, брэд. Это только когда-либо будет «включено» в среде разработки, поэтому у меня нет проблем с локальным хранилищем. Кажется хорошим решением. Я раньше не использовал jquery, поэтому я отдам его! –