0

当我进入一个网站时,我正在尝试实现一个“跟踪窗口”弹出窗口,然后在整个网站上向该窗口发送消息,以便诊断我在网站上遇到的一些更尴尬的问题。问题是页面发生变化,如果跟踪窗口已经存在,则在添加新的 TraceText 之前删除所有内容。我想要的是一个可以从网站内任何页面发送消息的窗口。

我有一个 javascript Script debugger.js,我将它作为脚本包含在每个屏幕中(如下所示),然后我会调用 sendToTraceWindow() 函数在整个网站上向它发送消息。由于我正在调查的问题,目前这主要是在 vbscript 中完成的。我认为这是因为我在 debugger.js 中编写脚本到每个屏幕,它设置 traceWindow 变量 = null (见下面的代码)但我不知道如何解决这个问题!

非常感谢任何帮助。安德鲁

代码示例:

调试器.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='trace' 的文本区域:

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

1 回答 1

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

每次加载新页面并刷新跟踪窗口时,都会从本地存储中加载现有跟踪数据并显示在您的文本区域中。这应该实现您正在寻找的功能。

请对任何错误表示友好-我将在星期一早上进行此操作!

找到 jQuery 库应该很简单。您可以在此处找到 jStorage 库:http: //www.jstorage.info/,您可以在此处找到 jquery-json:http ://code.google.com/p/jquery-json/

于 2012-05-28T16:43:53.650 回答