首页页面上放了这两段JS(其他还有很多,测试过是这两段可能有冲突,不能同时执行)<script type="text/javascript" src="../JS/CustomReport/ReportView.js" /> <script type="text/javascript"> var canCloseWindow;
function $(o) { return document.getElementById(o); }
window.onresize = resizeDivHtmlReport;
function resizeDivHtmlReport() {
$("divHtmlReport").style.height = self.document.body.clientHeight - 55;
} function GetStatus() {
canCloseWindow = document.getElementById("<%=txtCanCloseWindow.ClientID %>").value;
} function CanCloseWindow(canCloseWindow) {
if (!canCloseWindow) {
window.event.returnValue = "报表正在生成中, 离开当前页面将影响页面的正常浏览.";
}
}
</script>ReportView.js代码如下:
/*********************************/
var waiting_win;
function OpenWaiting() {
waiting_win = window.open('../waiting.aspx', 'WaitingWin', 'left='
+ (screen.availWidth - 300) / 2 + ',top='
+ (screen.availHeight - 200) / 2 + ',width=300,height=200');
}function window_OnUnLoad() {
alert(waiting_win);
if (typeof (waiting_win) != "undefined" && waiting_win != null) {
try {
waiting_win.opener = null; waiting_win.close();
}
catch (ex) { }
}
}
/*********************************/
然后前面简要的html代码<body onload="GetStatus()" onbeforeunload="CanCloseWindow()" onunload="window_OnUnLoad()">
//界面上还存放着一个html服务器控件用来保存canCloseWindow状态。
<input type="hidden" id="txtCanCloseWindow" value="true" runat="server" />
</body>我简单说下这个功能(其实也很简单)
首先,页面onload时,调用GetStatus方法,获取当前canCloseWindow状态。(默认为true,也就是说可以离开当前页),同时触发这个方法OpenWaiting()-->这个方法就是弹出一个耗时框,提示已操作多少时间。
然后呢,在页面执行时后台会对这个保存状态的值进行操作。比如:txtCanCloseWindow.Value = "false";,页面执行成功会再改回true;但是赋完值之后不知道会不会再执行onload事件。去更新状态值。。也就是说这里需要.net后台代码 为js中的字段赋值。(这是一个问题,不知道咋写),我现在的写不法不管用,
还有就是onbeforeunload="CanCloseWindow()"判断能否离开当前页面。这个事件是在onunload="window_OnUnLoad()"之前执行的,也就是说执行了onbeforeunload就不会再去执行onunload了。我现在想把window_OnUnLoad这个放到后台程序处理完成的那个方法里去执行。用了client.registerstartscript(随便拼的).可是不管用。
谁告诉我该咋改改?
function $(o) { return document.getElementById(o); }
window.onresize = resizeDivHtmlReport;
function resizeDivHtmlReport() {
$("divHtmlReport").style.height = self.document.body.clientHeight - 55;
} function GetStatus() {
canCloseWindow = document.getElementById("<%=txtCanCloseWindow.ClientID %>").value;
} function CanCloseWindow(canCloseWindow) {
if (!canCloseWindow) {
window.event.returnValue = "报表正在生成中, 离开当前页面将影响页面的正常浏览.";
}
}
</script>ReportView.js代码如下:
/*********************************/
var waiting_win;
function OpenWaiting() {
waiting_win = window.open('../waiting.aspx', 'WaitingWin', 'left='
+ (screen.availWidth - 300) / 2 + ',top='
+ (screen.availHeight - 200) / 2 + ',width=300,height=200');
}function window_OnUnLoad() {
alert(waiting_win);
if (typeof (waiting_win) != "undefined" && waiting_win != null) {
try {
waiting_win.opener = null; waiting_win.close();
}
catch (ex) { }
}
}
/*********************************/
然后前面简要的html代码<body onload="GetStatus()" onbeforeunload="CanCloseWindow()" onunload="window_OnUnLoad()">
//界面上还存放着一个html服务器控件用来保存canCloseWindow状态。
<input type="hidden" id="txtCanCloseWindow" value="true" runat="server" />
</body>我简单说下这个功能(其实也很简单)
首先,页面onload时,调用GetStatus方法,获取当前canCloseWindow状态。(默认为true,也就是说可以离开当前页),同时触发这个方法OpenWaiting()-->这个方法就是弹出一个耗时框,提示已操作多少时间。
然后呢,在页面执行时后台会对这个保存状态的值进行操作。比如:txtCanCloseWindow.Value = "false";,页面执行成功会再改回true;但是赋完值之后不知道会不会再执行onload事件。去更新状态值。。也就是说这里需要.net后台代码 为js中的字段赋值。(这是一个问题,不知道咋写),我现在的写不法不管用,
还有就是onbeforeunload="CanCloseWindow()"判断能否离开当前页面。这个事件是在onunload="window_OnUnLoad()"之前执行的,也就是说执行了onbeforeunload就不会再去执行onunload了。我现在想把window_OnUnLoad这个放到后台程序处理完成的那个方法里去执行。用了client.registerstartscript(随便拼的).可是不管用。
谁告诉我该咋改改?
对于你这个问题
Response.write("<script>canCloseWindow='true'</script>");在后台试试这个方法。
为什么你调用onbeforeunload="CanCloseWindow()" 没给它传参数呢?
onunload事件并不保险。可能的话后台要做超时服务程序来处理.
页面上有一个创建报表按钮,
当我点击按钮时。
弹出waiting.aspx(就是提示已耗时多少的一个框)
同时点击按钮之后就不可以再点击到别的地方
关闭页面或者刷新或者点别的页面都会提示
function CanCloseWindow(canCloseWindow) {
if (!canCloseWindow) {
window.event.returnValue = "报表正在生成中, 离开当前页面将影响页面的正常浏览.";
}
}最后生成成功或者有错误返回的话,可以关闭页面同时关闭刚才的那个waiting.aspx,
可是我上面的那些代码不管用,不能同时用到一起。
“生成报表”按钮点击时弹出div遮罩层并ajax(设置setTimeout周期1秒)请求process.aspx
process.aspx用来生成报表,并返回是否生成成功
process.aspx返回值来确定div遮罩关闭或页面可关闭注意页面不要回发
所以弄得现在不知道怎么去处理。