zoukankan      html  css  js  c++  java
  • Page.ClientScript.RegisterStartupScript()方法使用注意问题

    .Net代码在Server端处理数据的时候,如果要采用JS脚本,我们一般都会采用Page.ClientScript.RegisterStartupScript这个方法来为页面注册脚本事件,这个代码我也是一直在使用,没有什么问题。可是最近我用IE8测试页面的时候,发现一旦我在服务器端触发这样的代码,浏览器的左下角总是会有错误提示:

    打开看下究竟发生了什么

    通过这个提示,我们大概可以知道,在Document还没有初始化之前,JS脚本就试图加载DOM才会形成这样的问题,那么我们的代码是怎么写的呢

    /// <summary>
            /// 弹出JavaScript小窗口
            /// </summary>
            /// <param name="js">窗口信息</param>
            public static void Alert(string message, Page page)
            {
                #region
                string js = @"<script type='text/javascript'>
                        jAlert('" + message + "','提示');</script>";
                //HttpContext.Current.Response.Write(js);
                if (!page.ClientScript.IsStartupScriptRegistered(page.GetType(), "alert"))
                {
                    page.ClientScript.RegisterStartupScript(page.GetType(), "alert", js);
                }
                #endregion
            }

    我们可以看到这是一种和普遍的写法,试试上我也是从网上百度到的,后来又百度了一下,原来需要在这个方法提交前,判断一下浏览器是否已经加载完毕,也就是加一个document.readyState来判断一下,于是代码改为

    /// <summary>
            /// 弹出JavaScript小窗口
            /// </summary>
            /// <param name="js">窗口信息</param>
            public static void Alert(string message, Page page)
            {
                #region
                string js = @"<script type='text/javascript'>
                        $(document).ready(function(){jAlert('" + message + "','提示');});</script>";
                //HttpContext.Current.Response.Write(js);
                if (!page.ClientScript.IsStartupScriptRegistered(page.GetType(), "alert"))
                {
                    page.ClientScript.RegisterStartupScript(page.GetType(), "alert", js);
                }
                #endregion
            }

    我们再运行一下看这个错误还会不会被抛出来

    我这里的jAlert()方法在加载的时候回去操作DOM,所以造成了这样的一个现象,这样的现象还包括IE8中会提示你页面不存在,也是这个原因。

    看似简单的代码,其实里面还是有很多东西需要我们去注意的。

     

     

  • 相关阅读:
    std::type_index(转)
    __sync_fetch_and_add系列(转)
    InterlockedIncrement函数详解(转)
    如何让服务端同时支持WebSocket和SSL加密的WebSocket(即同时支持ws和wss)?(转)
    Linux系统管理基础测试
    CentOS7.7源码包安装Cmake3.0
    Shell-三剑客(sed)
    问题-突然发现公司网站访问速度变的很慢很慢
    Linux基础命令之文件及目录管理
    Linux基础命令之进程管理
  • 原文地址:https://www.cnblogs.com/weicleer/p/2792430.html
Copyright © 2011-2022 走看看