首页页面上放了这两段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(随便拼的).可是不管用。
谁告诉我该咋改改?

解决方案 »

  1.   

    但是赋完值之后不知道会不会再执行onload事件。去更新状态值。。也就是说这里需要.net后台代码 为js中的字段赋值。(这是一个问题,不知道咋写)
    对于你这个问题
    Response.write("<script>canCloseWindow='true'</script>");在后台试试这个方法。
      

  2.   

    function CanCloseWindow(canCloseWindow) 方法有参数,
    为什么你调用onbeforeunload="CanCloseWindow()" 没给它传参数呢?
      

  3.   

    看上去是要用ajax的,onload只能触发一次,要么就刷新页面.
    onunload事件并不保险。可能的话后台要做超时服务程序来处理.
      

  4.   

    如果赋值时页面回发,onload肯定就执行了。另外正如你所说onbeforeunload执行了onunload就不会执行了,所以建议你吧onunload的方法放到onbeforeunload里
      

  5.   

    有一个reportview.aspx页面。
    页面上有一个创建报表按钮,
    当我点击按钮时。
    弹出waiting.aspx(就是提示已耗时多少的一个框)
    同时点击按钮之后就不可以再点击到别的地方
    关闭页面或者刷新或者点别的页面都会提示
    function CanCloseWindow(canCloseWindow) {
                if (!canCloseWindow) {
                    window.event.returnValue = "报表正在生成中, 离开当前页面将影响页面的正常浏览.";
                }
            }最后生成成功或者有错误返回的话,可以关闭页面同时关闭刚才的那个waiting.aspx,
    可是我上面的那些代码不管用,不能同时用到一起。
      

  6.   

    我想你应该用ajax来实现此功能,步骤:
    “生成报表”按钮点击时弹出div遮罩层并ajax(设置setTimeout周期1秒)请求process.aspx
    process.aspx用来生成报表,并返回是否生成成功
    process.aspx返回值来确定div遮罩关闭或页面可关闭注意页面不要回发
      

  7.   

    我就是不想用ajax 了啊
    所以弄得现在不知道怎么去处理。