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