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中会提示你页面不存在,也是这个原因。

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

    --------------------------------------------------------------------------------------------------------------------------------------------
    顺势而为
  • 相关阅读:
    CSS3中的opacity透明度属性的继承问题如何解决
    webstorm前端开发工具vue环境配置及运行项目
    new String(getBytes(ISO-8859-1),UTF-8)中文编码避免乱码
    超详细多线程讲解
    jQuery mobile 核心功能
    解读四大移动web应用开发框架真相
    2014,成为更好程序员的7个方法
    window8.1使用之快捷键
    C#深入浅出 关键字(一)
    C#深入浅出 C#语法中的重中之重——委托(四)
  • 原文地址:https://www.cnblogs.com/zhuzhenyu/p/2720477.html
Copyright © 2011-2022 走看看