前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >ASP.NET AJAX(12)__浏览器兼容功能判断浏览器的类型和版本Sys.Browser针对DOM元素的兼容操作针对DOM事件的兼容操作

ASP.NET AJAX(12)__浏览器兼容功能判断浏览器的类型和版本Sys.Browser针对DOM元素的兼容操作针对DOM事件的兼容操作

作者头像
小白哥哥
发布于 2018-03-07 03:28:39
发布于 2018-03-07 03:28:39
1.2K00
代码可运行
举报
文章被收录于专栏:技术小讲堂技术小讲堂
运行总次数:0
代码可运行

目前,常见的浏览器IE(6,8,9),chrome,firefox,safari等,还有国内的一些曾经靠恐吓用户来提高使用率的某浏览器(河蟹社会),这些浏览器对于Javascript的语言特性实现大致是相同的,但是对于DOM操作方式却大相径庭,所以我们通常需要自己对不同浏览器对于DOM的操作方式进行分而治之,或者我们往往是使用一些Javascript框架提供的兼容功能,当然也有我们的Microsoft AJAX Library

判断浏览器的类型和版本

浏览器兼容层的优势在于,我们可以使用同样的编码方式,让相同的代码在不同浏览器下的表现统一,因为在这个兼容层内部,分别实现了或者规避了一些浏览器的不同的实现,但是不同的浏览器的某些差异难以使用框架来保证,因此提供显式的判断浏览器的类型和版本是必不可少的

Sys.Browser

  • 通过windows.navigator.userAgent来判断
  • Sys.Brower.agent表示浏览器类型(可能的值InternetExplorer/FireFox/Safari/Opera)
  • Sys.Brower.hadDebuggerStatement:是否支持debugger命令
  • Sys.Brower.name:浏览器名称
  • Sys.Brower.version:浏览器版本
一个通过浏览器类型获得显示窗口的大小的示例

创建一个aspx页面

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="GetClientBoundsByBrowerType.aspx.cs" Inherits="Demo11_GetClientBoundsByBrowerType" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
        
        <script language="javascript" type="text/javascript">
            document.write(window.navigator.userAgent);//打印浏览器信息
        </script>
        
        <hr />
        
        <script language="javascript" type="text/javascript">
            document.write("Has Debugger Statement:" + Sys.Browser.hasDebuggerStatement + "<hr/>");//是否支持debugger
            document.write("Name:" + Sys.Browser.name + "<hr/>");//浏览器名称
            document.write("Version:"+Sys.Browser.version);//浏览器版本
        </script>
        
        <script language="javascript" type="text/javascript">
            function getClientBounds() {
                var clientWidth;
                var clientHeight;
                switch (Sys.Browser.agent) {//判断浏览器类型
                    case Sys.Browser.InternetExplorer: //如果浏览器是InternetExplorer
                        clientWidth = document.compatMode == "CSS1Compat" ? document.documentElement.clientWidth : document.body.clientWidth;
                        clientHeight = document.compatMode == "CSS1Compat" ? document.documentElement.clientHeight : document.body.clientHeight;
                        break;
                    case Sys.Browser.Safari: //如果浏览器是Safari
                        clientWidth = window.innerWidth;
                        clientHeight = window.innerHeight;
                        break;
                    case Sys.Browser.Opera: //如果浏览器是Opera
                        clientWidth = Math.min(window.innerWidth, document.body.clientWidth);
                        clientHeight = Math.min(window.innerHeight, document.body.clientHeight);
                        break;
                    case Sys.Browser.Firefox: //如果浏览器是Firefox
                        clientWidth = Math.min(window.innerWidth, document.documentElement.clientWidth);
                        clientHeight = Math.min(window.innerHeight, document.documentElement.clientHeight);
                        break;
                }
                return { width: clientWidth, height: clientHeight };
            }
        </script>
        <hr />
        <div id="clientBounds"></div>
        <script language="javascript" type="text/javascript">
            window.onresize = function() {//当浏览器的大小改变的时候调用
            var bounds = getClientBounds();
                $get("clientBounds").innerHTML = String.format("Width:{0}<br/>Height:{1}",bounds.width,bounds.height);
            }
        </script>
    </form>
</body>
</html>

我这里使用的是IE8,chrome14.0和firefox6进行测试,得到的结果如下所示

IE8

chrome14.0

firefox6

这里我要提一下,其实Microsoft AJAX Library是没有直接的提供chrome的支持的,我这里使用它进行测试,完全是因为我这里只装了这三种浏览器,在chrome下,很多东西得出的结果是不正确的,只是让大家明白这里的不同,不要太多关注与它对chrome的支持

同样,这里我们也可以看到,在取到浏览器的尺寸的时候,各种浏览器的取得方法,是完全不相同的,这就是我们前面提到的对于DOM操作方式却大相径庭

针对DOM元素的兼容操作

  • Sys.UI.DomElement静态类中
  • $get=.getElementById=function(id,parent);//只是效果,并不等同
  • Sys.UI.DomElement.addCssClass=function(element,className);
  • Sys.UI.DomElement.removeCssClass=function(element.className);
  • Sys.UI.DomElement.containsCssClass=function(element,className);//判断元素下是否有这个className类
  • Sys.UI.DomElement.toggleCssClass=function(element,className);//如果元素有className,则去除,如果没有则添加
  • 可以自行添加缩写方法:eg:$addCss=Sys.UI.DomElement.addCssClass
  • Sys.UI.DomElement.getLocation=function(element)//返回Sys.UI.DomElement类型对象的位置
  • Sys.UI.DomElement.setLocation=funcation(element,x,y)
  • Sys.UI.DomElement.getBounds=funcation(element)//得到元素的大小和位置返回Sys.UI.Bounds
一个针对DOM元素的兼容操作的示例

创建一个名为DomElementOperations.aspx的页面

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="DomElementOperations.aspx.cs" Inherits="Demo11_DomElementOperations" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <style type="text/css">
        .red{color:Red;}
        .large{font-size:xx-large;}
    </style>
</head>
<body>
    <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
        
        <script language="javascript" type="text/javascript">
            //自行添加的缩写方法
            $addCss = Sys.UI.DomElement.addCssClass;
            $removeCss = Sys.UI.DomElement.removeCssClass;
            $containCss = Sys.UI.DomElement.containsCssClass;
            $toggleCss = Sys.UI.DomElement.toggleCssClass;
        </script>
        
        <input type="checkbox" id="inputElement" /><%--这里我们使用了两个相同的id--%>
        <div id="someContainer">
            <input type="text" id="inputElement" /><%--这里我们使用了两个相同的id,这个元素包裹在了一个DIV--%>
        </div>
        <script language="javascript" type="text/javascript">
            document.write($get("inputElement").type + "<br/>");//这里将会打印checkbox,因为开始找到的是一个checkbox
            document.write($get("inputElement", $get("someContainer")).type + "<br/>"); //这里指定了将在id为someContainer的元素里找,所以是一个input
        </script>
        <hr />
        <div id="someText">
            Xiaoyaojian
        </div>
        <input type="button" value="Add Red" onclick="$addCss($get('someText'),'red')" /><%--添加一个red样式--%>
        <input type="button" value="Remove Red" onclick="$removeCss($get('someText'),'red')" /><%--去除一个red样式--%>
        <input type="button" value="Toggle Large" onclick="$toggleCss($get('someText'),'large')" /><%--如有有large这个元素,则去除,如果没有则添加--%>
        <input type="button" value="Container Large" onclick="alert($containCss($get('someText'),'large'))" /><%--判断元素上是否有large这个样式--%>
        
        <hr />
        
        <div id="anElement" style="background-color:Red; color:White; position:absolute; overflow:hidden;">
            Hello World
        </div>
        
        <script language="javascript" type="text/javascript">
            function setRandomLocation() {
                var left = Math.floor(Math.random() * 100);
                var top = Math.floor(Math.random() * 100);
                Sys.UI.DomElement.setLocation($get("anElement"), left, top);//设置位置,他相对左上角的位置是随机产生的
            }

            function setRandomSize() {
                $get("anElement").style.width = Math.floor(Math.random() * 100 + 50) + "px"; //设置元素的宽
                $get("anElement").style.height = Math.floor(Math.random() * 100 + 50) + "px";//设置元素的高
            }
            
            function showLocation() {
                var point = Sys.UI.DomElement.getLocation($get("anElement"));//显示元素相对浏览器左上角位置
                alert(String.format("x:{0},y:{1}",point.x,point.y));
            }

            function showBounds() {//显示元素的宽高(大小)和相对浏览器左上角的位置
                var point = Sys.UI.DomElement.getBounds($get("anElement"));
                alert(String.format("x:{0},y:{1},width:{2},height:{3}", point.x, point.y,point.width,point.height));
            }
        </script>
        
        <input type="button" value="Set Location" onclick="setRandomLocation()" />
        <input type="button" value="Set Size" onclick="setRandomSize()" />
        <input type="button" value="Show Location" onclick="showLocation()" />
        <input type="button" value="Show Bound" onclick="showBounds()" />
    </form>
</body>
</html>

在页面的代码注释里,我自认为已经写的足够的清楚,所以我在这里就不多做解释

针对DOM事件的兼容操作

出现的原因

  • 添加和删除event handler的方法不同
  • 获取Event对象的方法不同
  • Event对象的方法和属性不同
  • …等等
  • 因为种种原因,微软提供了一套“第三种形式的”DOM事件操作
提供的操作
  • 添加Event Handler:$addHandler(element,eventName,handler);//这里的事件名没有“on”
  • 添加Event Handler$addHandlers(element,events,owner);//events为一个存放Event Handler的字典,Owner为执行EventHandler的上下文对象
  • 去除Event Handler :$removeHandler(element,eventName,handler);
  • 去除所有的Event Handler: $clearHandlers(element);
  • Event Handler签名:on***(event);//event为一个Sys.UI.DomEvent类的对象
  • Sys.UI.DomEvent.preventDefault();//组织事件的默认行为
  • Sys.UI.DomEvent..stopPropagation();//阻断事件的向上传递
  • Sys.UI.DomEvent.altKey/ctrlKey/shiftKey;//触发事件时用户是否按着Alt/Ctrl/Shift键
  • Sys.UI.DomEvent.type:一个表示事件类型的字符串
  • Sys.UI.DomEvent.target:触发事件的DOM元素
  • Sys.UI.DomEvent.button:一个Sys.UI.MouseButton的枚举
  • Sys.UI.DomEvent.keyCode:一个表示当前按键的整数值,可以和Sys,UI,Key枚举的项找到对应关系
  • Sys.UI.DomEvent.clientX/clientY:鼠标在document可视范围内的位置(和滚动条状态无关)
  • Sys.UI.DomEvent.screenX/screenY:鼠标在屏幕中的位置
  • Sys.UI.DomEvent.offsetX/offsetY:鼠标在触发事件的对象中的相对位置
  • Sys.UI.DomEvent.rawEvent:浏览器原生事件对象
一个针对DOM事件的兼容操作的示例

创建一个asp页面,我们如果没有这个浏览器兼容层的情况下,我们如果为一个按钮在javascript中为一个按钮添加一个事件, 则需要如下代码来兼容不同的浏览器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<input type="button" value="Button" id="aButton" onclick="eventHandler(event)" />
        
        <script language="javascript" type="text/javascript">
            var button = document.getElementById("aButton");

            //只对IE有效果
            button.attachEvent("onclick", eventHandler);
            button.detachEvent("onclick", eventHandler);

            //只对firefox有效果
            button.addEventListener("onclick", eventHandler);
            button.removeEventListener("onclick", eventHandler);

            //兼容两种浏览器
            if (button.attachEvent) {
                button.attachEvent("onclick", eventHandler);
            }
            else {
                button.addEventListener("onclick", eventHandler);
            }
        </script>

而在我们有了这个浏览器兼容层的情况下,我们只需要做如下的操作

在页面中首先添加一个ScriptManager

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div style="width:300px; height:300px; background-color:Red" id="mouseEvent">
        </div>
        
        <script language="javascript" type="text/javascript">
            function onMouseDown(e) {
                $get("displayMouseEvent").innerHTML = String.format(
                    "altKey:{0}<br/>"+
                    "ctrlKey:{1}<br/>"+
                    "shiftKey:{2}<br/>"+
                    "clientX & Y:({3},{4})<br/>"+
                    "screenX & Y:({5},{6})<br/>"+
                    "offsetX & Y:({7},{8})<br/>" +
                    "button:{9}",
                    e.altKey,e.ctrlKey,e.shiftKey,//是否按着Alt/Ctrl/Shift这几个键
                    e.clientX,e.clientY,//可视范围内的位置
                    e.screenX,e.screenY,//相对于屏幕的位置
                    e.offsetX, e.offsetY,//相对于元素内部的位置
                    Sys.UI.MouseButton.toString(e.button));//表示按下的按键,左/右/中(按下滚轮)
            }

            $addHandler($get("mouseEvent"), "mousedown", onMouseDown); //为上面的div添加一个mousedown事件,触发这个事件,调用onMouseDown方法
        </script>
        
        <div id="displayMouseEvent"></div><%--要显示信息的DIV%>

这时,我们可以在红块内点击鼠标的左右中键,并同时按下Alt/Ctrl/Shift键盘,就可以清晰的反映到下面的DIV的信息里

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2011-10-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
ASP.NET AJAX(14)__UpdatePanel与服务器端脚本控件脚本控件的作用脚本控件的指责Extender模型脚本控件和Extender模型在PostBack中保持状态在UpdatePa
脚本控件的作用 ASP.NET AJAX的脚本控件,连接了服务器端和客户端,因为我们(可以)只在服务器端编程,而效果产生在客户端,这就需要我们首先在服务器端编写一个控件类,然后包含一个或几个脚本文件,其中定义了客户端组件,可以让开发人员只在服务端操作控件,而在页面上添加客户端行为 一个典型的脚本控件就是UpdateProgress,我们来看一下它的实现方式 一个UpdateProgress的简单示例 创建一个aspx页面 <%@ Page Language="C#" AutoEventWireup="tru
小白哥哥
2018/03/07
2K0
ASP.NET AJAX(14)__UpdatePanel与服务器端脚本控件脚本控件的作用脚本控件的指责Extender模型脚本控件和Extender模型在PostBack中保持状态在UpdatePa
ASP.NET AJAX(10)__Authentication ServiceAuthentication ServiceAuthentication Service属性Authentication
在通常情况下,如果使用AJAX方式调用WebService,则可能被恶意用户利用,造成性能以及安全性的问题,所以我们需要使用一些验证方式来保护WebService,最常见方式就是Forms Authentication,这也是一种用法很简单的方式 一个使用FormsAuthentication保护WebService调用的示例 首先创建一个名为ProtectedService的WebService,代码如下 using System; using System.Collections.Generic; us
小白哥哥
2018/03/07
1.8K0
浅谈ASP.NET的Postback
说道ASP.NET的Postback,就得说Web Page的生命周期,但是Web Page的生命周期却不是三言两语就能够说得清楚的,所以在这里单纯站的编程的角度,撇开Web Page 的生命周期浅谈Postback。 我们知道,无论是ASP.NET1.x,2.0,甚至是以后的版本,ASP.NET最终Render到Client端通过浏览器浏览的都是一样:一个单纯的HTML。Client通过Submit Form的方式将填入Form的数据提交给Server进行处理。我们现在来看看ASP.NET整个Postba
蒋金楠
2018/01/16
1.2K0
浅谈ASP.NET的Postback
ASP.NET AJAX(7)_Microsoft AJAX Library扩展客户端组件继承时需要注意的问题扩展类型如何修改已有类型
首先,延续上一讲的内容,谈一下客户端面向对象类型系统中事件的使用 在C#中定义的一种方式 public class WorkEventArgs:EventArgs { ... } public class SomeClass { public event EventHandler<WorkEventArgs> Work; protected void OnWork(WorkEventArgs e) { if(Work!=null)
小白哥哥
2018/03/07
1.3K0
ASP.NET AJAX(15)__构建高性能ASP.NET AJAX应用UpdatePanel的性能问题使用UpdatePanel的注意事项脚本加载避免脚本阻塞页面显示AjaxControlTool
UpdatePanel的性能问题 在UpdatePanle使用的时候,它每次的更新都是将整个页面回送的,而且也会加上一些他更新的标记,所以往往它传递的数据量比传统的PostBack都要多,这其实是违背AJAX减少数据量传输的特点的 使用UpdatePanel的注意事项 在使用UpdatePanel的时候,要只传输必要的内容,使用相对小而细的UpdatePanel,而不是使用大而全的UpdatePanel,在每次PostBack后只需要更新必要的UpdatePanel(将UpdatePanel的UpdateM
小白哥哥
2018/03/07
9060
ASP.NET AJAX(4)__客户端访问WebService服务器端释放WebService方法客户端访问WebService客户端访问PageMethod错误处理复杂数据类型使用基础客户端代理的
服务器端释放WebService方法 编写一个普通的WebService 为WebService类添加自定义的属性标记__ScriptServiceAttribute 释放WebService方法                   __访问级别为Public                   __使用WebServiceAttribute进行标记 为页面中的ScriptManager引入asmx文件 客户端访问WebService [Namespaces.]ClassName.MethodName 依次
小白哥哥
2018/03/07
4.9K0
asp.net中ScriptManager自带Ajax与jQuery事件冲突
问题引诉:最近在使用asp.net自带的无刷新提交ScriptManager时,发现一个问题,就是和我自己用jQuery写的一些事件函数和局部刷新相冲突。通过在网上收索,发现很多人都遇到这个同样的问题。最终还是找到的解决的办法,在此我想将其解决的办法分享出来供大家参考。
小小许
2018/09/20
1K0
ASP.NET AJAX(13)__利用Microsoft AJAX Library开发客户端组件Sys.Component成员Sys.IDisposable成员Sys.INotifyDisposin
Microsoft AJAX Library定义了一个客户端组件的模型,它的基类是Sys.Component,它实现了三个接口Sys.IDisposable,Sys.INotifyDisposing,Sys.INotifyPropertyChange Sys.Component成员 get_events() get_id(); set_id(); get_isInitialized(); initialize(); dispose(); raisePropertyChanged(); Sys.IDispos
小白哥哥
2018/03/07
3.1K0
ASP.NET AJAX(13)__利用Microsoft AJAX Library开发客户端组件Sys.Component成员Sys.IDisposable成员Sys.INotifyDisposin
asp.net弹出层实例
源代码地址:http://download.csdn.net/detail/yayun0516/8264489
全栈程序员站长
2022/07/05
1.4K0
asp.net弹出层实例
ASP.NET AJAX(3)__UpdatePanel
今天也不知道写不写的完了,最近闲下来了,却感冒了,早上起来都不会说话了,不过幸亏咱不是靠嘴皮子过活了,哎~~~~窃喜吧 上一篇简单写到UpdatePanel的一些好处和坏处,这一篇呢,就细致的认识一下UpdatePanel这个控件,并合理的使用它 UpdatePanel的一些属性 : RenderMode     __Block(默认值):设定UpdatePanel使用DIV来圈出要跟新的区域     __Inline:设定UpdatePanel使用span来。。。。。。 UpdateMode  
小白哥哥
2018/03/07
4.9K0
ASP.NET AJAX(3)__UpdatePanel
ASP.NET AJAX UpdatePanel 控件实现剖析
使用ASP.NET AJAX框架我们可以搭建快速响应、具有丰富的用户体验的AJAX Web应用程序,而该框架的UpdatePanel控件则提供了一种非常简单的方式来实现Web页面的局部更新,我们不需要在每次回发的时候都加载整个页面。 那这个控件是如何实现这种局部刷新的哪,透过其实现机制我们可以更清楚其优缺点,便于我们确定其使用场合。本文将重点阐述ASP.NET AJAX控件UpdatePanel的实现机制。 1. ASP.NET AJAX 简介 ASP.NET AJAX是微软在ASP.NET 2.0之上对A
葡萄城控件
2018/01/10
6.8K0
ASP.NET AJAX UpdatePanel 控件实现剖析
ASP.NET AJAX(5)__JavaScript原生类型以及Microsoft AJAX Library什么是Microsoft AJAX LibraryObject原生类型Object.pro
什么是Microsoft AJAX Library ASP.NET AJAX的客户端部分 纯客户端框架 提供了JavaScript扩展和基础类库 Object原生类型 ECMAScript Spec中定义:一个无序的集合,可以存放任意类型的对象 常作为字典使用 可以使用for-in遍历字典中的每一项 禁止扩展其prototype对象 Miicrosoft AJAX Library并没有扩展Object 类型 Object.prototype toString()/toLocalString()   得到表示
小白哥哥
2018/03/07
1.3K0
ASP.NET AJAX 控件开发基础
在 JavaScript 当前广泛使用的版本中,它缺少 .NET 开发人员所熟悉的几个 OOP 的关键概念,而 ASP.NET AJAX 可以模拟其中的大多数,而且 ASP.NET AJAX 的目标是将使用 .NET 的开发人员所熟悉的某些其他构造(例如属性、事件、枚举和接口)转换成 JavaScript.ASP.NET AJAX 中的反射 API 将检查所有类型(无论是内置类型、类、接口、命名空间、或者甚至是枚举),而它们包括的类似 .NET Framework 的函数(例如 isInstanceOfTy
张善友
2018/01/26
2.4K0
asp:UpdatePanel客户端回传事件管理
Asp:UpdatePanel是在Asp.Net WebForm中的一个局部刷新控件,虽然很好用,但是在使用过程中却发现如果局部刷新的数据需要再次使用页面js进行格式化,页面则会乱套,所以在这里我们需要对UpdatePanel的回传过程进行控制。
全栈程序员站长
2022/09/15
3.6K0
ASP.NET AJAX(9)__Profile Service什么是ASP.NET Profile如何使用ASP.NET ProfileProfile ServiceProfile Service预
什么是ASP.NET Profile 可以为每个用户(包括匿名用户)储存信息 通过在Web.config中的配置即可在应用程序中使用 强类型的属性 可以定义属性组 可以通过自定义ProfileProvider来扩充 如何使用ASP.NET Profile 配置ProfileProvider(可以使用内置的SqlProfileProvider) 配置Profile的属性 一个使用ASP.NET Profile的示例 首先,运行打开Visual studio 2008命令提示工具(开始——程序——Visual
小白哥哥
2018/03/07
1.3K0
ASP.NET AJAX(9)__Profile Service什么是ASP.NET Profile如何使用ASP.NET ProfileProfile ServiceProfile Service预
AJAX控件UpdatePanel使用详解
UpdatePanel可以用来创建丰富的局部更新Web应用程序,它是ASP.NET 2.0 AJAX Extensions中很重要的一个控件,其强大之处在于不用编写任何客户端脚本,只要在一个页面上添加几个UpdatePanel控件和一个ScriptManager控件就可以自实现一.
阳光岛主
2019/02/19
1.1K0
JS 获取浏览器窗口大小clientWidth、offsetWidth、scrollWidth「建议收藏」
在我本地测试当中: 在IE、FireFox、Opera下都可以使用 document.body.clientWidth document.body.clientHeight 即可获得,很简单,很方便。 而在公司项目当中: Opera仍然使用 document.body.clientWidth document.body.clientHeight 可是IE和FireFox则使用 document.documentElement.clientWidth document.documentElement.clientHeight 原来是W3C的标准在作怪啊
全栈程序员站长
2022/09/16
7.5K0
JS 获取浏览器窗口大小clientWidth、offsetWidth、scrollWidth「建议收藏」
JavaScript Window - 浏览器对象模型浏览器对象模型 (BOM) 使 JavaScript 有能力与浏览器“对话”。浏览器对象模型 (Browser Object Model)1 Wi
尚无正式标准。由于现代浏览器已经(几乎)实现了 JavaScript 交互性方面的相同方法和属性,因此常被认为是 BOM 的方法和属性。
JavaEdge
2018/08/02
5390
ASP.NET AJAX(11)__ScriptManagerUpdatePanel的支持成员功能控制成员脚本控件支持成员ScriptMode和ScriptPathLoadScriptsBeforeU
ScriptManager的作用,这个不言而喻,它是整个的ASP.NET AJAX的核心 UpdatePanel的支持成员 static void RegisterArrayDeclaration static void RegisterClientScriptBlock static void RegisterScriptInclude static void RegisterClientScriptResource static void RegisterExpandoAttribute static
小白哥哥
2018/03/07
9310
Ajax之三 Ajax服务器端控件
Ajax Extensions是Asp.NetAJAX框架的核心组件,只有使用它提供的服务,才能实现局部刷新和个性化组件的AJAX效果。
用户9184480
2024/12/17
1020
Ajax之三 Ajax服务器端控件
推荐阅读
ASP.NET AJAX(14)__UpdatePanel与服务器端脚本控件脚本控件的作用脚本控件的指责Extender模型脚本控件和Extender模型在PostBack中保持状态在UpdatePa
2K0
ASP.NET AJAX(10)__Authentication ServiceAuthentication ServiceAuthentication Service属性Authentication
1.8K0
浅谈ASP.NET的Postback
1.2K0
ASP.NET AJAX(7)_Microsoft AJAX Library扩展客户端组件继承时需要注意的问题扩展类型如何修改已有类型
1.3K0
ASP.NET AJAX(15)__构建高性能ASP.NET AJAX应用UpdatePanel的性能问题使用UpdatePanel的注意事项脚本加载避免脚本阻塞页面显示AjaxControlTool
9060
ASP.NET AJAX(4)__客户端访问WebService服务器端释放WebService方法客户端访问WebService客户端访问PageMethod错误处理复杂数据类型使用基础客户端代理的
4.9K0
asp.net中ScriptManager自带Ajax与jQuery事件冲突
1K0
ASP.NET AJAX(13)__利用Microsoft AJAX Library开发客户端组件Sys.Component成员Sys.IDisposable成员Sys.INotifyDisposin
3.1K0
asp.net弹出层实例
1.4K0
ASP.NET AJAX(3)__UpdatePanel
4.9K0
ASP.NET AJAX UpdatePanel 控件实现剖析
6.8K0
ASP.NET AJAX(5)__JavaScript原生类型以及Microsoft AJAX Library什么是Microsoft AJAX LibraryObject原生类型Object.pro
1.3K0
ASP.NET AJAX 控件开发基础
2.4K0
asp:UpdatePanel客户端回传事件管理
3.6K0
ASP.NET AJAX(9)__Profile Service什么是ASP.NET Profile如何使用ASP.NET ProfileProfile ServiceProfile Service预
1.3K0
AJAX控件UpdatePanel使用详解
1.1K0
JS 获取浏览器窗口大小clientWidth、offsetWidth、scrollWidth「建议收藏」
7.5K0
JavaScript Window - 浏览器对象模型浏览器对象模型 (BOM) 使 JavaScript 有能力与浏览器“对话”。浏览器对象模型 (Browser Object Model)1 Wi
5390
ASP.NET AJAX(11)__ScriptManagerUpdatePanel的支持成员功能控制成员脚本控件支持成员ScriptMode和ScriptPathLoadScriptsBeforeU
9310
Ajax之三 Ajax服务器端控件
1020
相关推荐
ASP.NET AJAX(14)__UpdatePanel与服务器端脚本控件脚本控件的作用脚本控件的指责Extender模型脚本控件和Extender模型在PostBack中保持状态在UpdatePa
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文