弹出窗口不附加文本

时间:2012-05-28 13:46:33

标签: asp-classic popupwindow window.open

我正在尝试在进入网站时实现“跟踪窗口”弹出窗口,然后在整个网站上向该窗口发送消息,以便诊断我对该网站的一些更棘手的问题。 问题是页面更改,如果跟踪窗口已存在,则在添加新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 ='trace'的textarea:

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

1 个答案:

答案 0 :(得分: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/