编写跨浏览器的DHTML应用程序

Unity简单操作:PostProcessing的使用 Postprocessing是一个unity2018版本的集成后期插件,有了这个插件,之后用unity开发时,后期调整颜色、光晕等会很方便。 目录 新建一个postprocessing profile(配置文件)。​ 参数说明: 新建一个postprocessing profile(配置文件)。 在主相机下加一个组件PostProcess Layer。 注意:需要将相机的Layer层设置与Post Process Layer 下的Volume blending(体积混合)... 阅读详情
本文介绍了IE和Navigator两种浏览器对DHTML标准实现的差异,特别是如何编写Navigator中运行的DHTML程序。


  DHTML(Dynamic HTML)是W3C组织提出的一种新的规范,它对原有的HTML做了许多扩充,并结合Javascript,使得静态的HTML页面产生了许多动态效果,例如菜单的展开和收起,页面元素的外观动态改变等。IE 4.0以上,Navigator 4.0以上的版本都支持这个标准。但是,不同的浏览器厂家对它都做了不同程度的扩充。以最流行IE的和NS为例,IE的实现更接近于W3C的方案,而NS,说实话,与W3C的方案差异很大,而且并没有完全实现,甚至可以说是另一套方案。笔者在初识DHTML时,按照书上讲的编写了几个小程序,在IE上一试就通,而在NS上可以说费尽了周折才逐渐找到解决方案。由于市面上很少有讲述NS的DHTML实现方案的书(大概NS由于的实现不符合标准),而真正的商业网站至少应同时支持IE和NS这两种主要的浏览器,我愿意把我的一些心得写出来与大家共享,使大家不必再走我走过的弯路。对于二者的实现相同的部分,本文作一简略介绍,您若有兴趣可参考有关书籍或网上资源。


  DHTML实际上由三两部分组成:CSS(Cascade Style Sheet,级联样式表),层(Layer)和Javascript。


  所谓CSS,概念上类似于C++中的类,在类定义中指明元素的外观样式,如字体,颜色,大小等等,页面中的任何一个HTML元素如被指定属于这个类,就自动拥有该类的特性;还可以为某种HTML元素定义样式,这样页面中的所有这种元素都有了同样的外观。如果将这样的样式定义存在一个单独的.css文件中(就象C++那样将类定义存在 .h文件中),再在页面中将其包含进来,则一个网站的所有页面就有了同样的外观。IE和NS对CSS的实现基本相同,在此就不再详细介绍了。


  两者的差异主要体现在层的实现上。所谓层,就是页面上的一块区域,其中可以包含任何的HTML元素,通过改变层的属性,其间的元素可以跟着出现,消失,更改,移动等。 在IE中,层依靠<DIV></DIV>和<SPAN></SPAN>来实现,两者基本相同,通常<DIV>用于较大的层,<SPAN>用于较小的层,并且<DIV>在实现的层后面加上一个回车换行,而<SPAN>不加。它的语法如下(二者相同):


  <div id=layername style="style definition">Layer content</div> 或


  <div id=layername class="classname">Layer content</div>


  其中style definition是一组有分号隔开的样式定义,常用的有以下几种:


  position:其值可以为absolute和relative,所谓absolute(绝对定位),就是层的内容不必按照出现的先后次序在浏览器上依次排列,而是可以像素为单位定位到浏览器用户区域的任意位置;而relative(相对定位)则是层按照相邻的内容依次排列。


  left,top,width,height:指层的左上角坐标以及它的宽度和高度。


  z-index:由于层可以被放置在页面的任何位置,当它与其它内容重合时,z-index值大的显示在上面,所有层的z-index值为1。但是在NS中,所有的表单元素(文本框,列表框,按钮等),只要是可见的就无法被遮住,而无论z-index值是多少。因此在设计页面时,要注意不要使动态出现或隐藏的元素(例如弹出式菜单)的位置上放置表单元素。


  Visibility:指明层是否可见,通过在程序中动态改变这个值,可以实现层的出现和消失,比如下拉菜单就要依靠它来实现。它的三个候选值为:inherit,可见性与父元素的可见性相同;visible,可见(在NS中是show);hidden,不可见(在NS中是hide)。


  NS同样支持这两个标记,但是支持得很不好,经常出现一些莫名其妙的错误,我想这可能是出于策略上的考虑,而不见得是NS的产品质量不好。NS引入了另两个标记,<layer>和<ilayer>,<layer>用于绝对定位,<ilayer>用于相对定位,因此在这两个标记的样式定义中没有position属性。


  两个浏览器对层的不同实现体现在以下几点:


  1. 层的引用。在IE中,页面上的每个可编程元素(不仅是层,还包括其它任何指明了ID值的元素,详见下文)都是document.all集合的一项;而在NS中,页面中每个层,无论是用上面四个标记中的哪个定义的,也无论是绝对或是相对定位,都是document.layers集合的一项。因此,若想引用名为layer1的层,应以如下语法:


  IE:document.all["layer1"]或document.all.layer1


  NS:document.layers["layer1"]或document.layers.layer1


  2. 层的坐标和大小。在IE中,每个涉及层的外观的属性,如位置,大小,颜色等,都是层的style属性集合的以一项,如层的左上角x坐标为document.all.layer1.style.pixelLeft,y坐标为  document.all.layer1.style.pixelTop,宽度为document.all.layer1.style.pixelWidth,高度为document.all.layer1.style.pixelHeight。还有几组属性如scrollxxx,offsetxxx,clientxxx,其中xxx为Left,Top,Width,Height ,分别描述层的滚动,位移,客户区等属性,详见MSDN中关于坐标的描述。而在NS中,每个层都有一个clip属性集,x,y,width,height是这个集的集合元素。


  另外,IE中所有元素拥有同一个坐标系,无论它位于层外或层内;在NS中,每个层都有一个独立的坐标系。


  3. 层的内容。IE中的层包含innerHTML和outerHTML属性(由于并非描述层的外观,所以它们不是style属性集的元素,而是层的属性),其含义如下:


  innerHTML:层中的HTML代码,但是不包括层的定义。


  outerHTML:层中的HTML代码,且包括层的定义。


  改变这些属性值就可以改变层的内容,如下语句改变层layer1的内容为加粗的字符串"layer1":document.all.layer1.innerHTML=”<b>layer1</b>” ,而在NS中,每一个document.layers集合中的元素,即一个层,都NS被视为一个独立的窗口,有独立document属性,就象Javascript中的document属性一样,通过调用document.write函数,可以动态改变层的内容。上例在NS中应修改为:


  document.layers.layer1.document.open();


  doucment.layers.layer1.write("<div><b>layer1</b></div>");


  document.layers.layer1.document.close;


  同样,对于层中的其它可编程元素,例如图象,其引用语法如下:document.layers.layer1.document.images[imgname],而如果该图象位于层的外面,其语法应为document.images[imgname],而在IE中,无论图象位于层内或层外,其语法都是后者。


  Javascript是Netscape公司首先提出的一种客户端编程的脚本语言,随后有扩展到服务器端。它的语法和概念都类似于C++,但是没有C++那样严格。IE同样支持客户端Javascript(微软还推出了类似的,功能更强大的Vbscript,但是NS却不支持)。两种浏览器对Javascript的基本实现是一样的,但是又都对它做了许多不同的扩展,而在DHTML编程中,很多情况下都需要用到这些扩展。由于此时已经没有标准可遵循,二者已经看不出有相同之处。例如,浏览器的客户区的宽度,在IE中是document.body.clientWidth,在NS中是window.innerWidth;再比如你想知道用户按浏览器的滚动条滚动了多少像素,在IE中是document.body.scrollTop,在NS中是window.pageYOffset。在这种情况下,你只能查阅二者的文档。IE的Javascript文档包含在MSDN中,也可以到微软的站点上单独下载。NS的Javascript文档可以到 http://developer.netscape.com上下载,那里也能得到NS的DHTML文档。


  NS没有实现的功能。


  1.IE中,页面中的任何元素都是可编程的,只要赋予它ID属性,其语法如下:


  <div id=itemid>content</div>或<span id=itemid>content</span>


  而在NS中,除非元素位于层中,否则无法对它编程。


  2.IE中增添了元素的渐变(Transition)和滤镜(Filter)效果,NS中没有。


  3.IE中支持客户端的数据绑定(Data bind),即页面中的某个元素(例如表格中的一个格)可以与服务器端的数据库的某个字段绑定,在数据内容不变的情况下,可以不必再次访问数据库而改变页面的形式(例如按某个字段重新排序)。NS同样没有实现这种特性。


  以上列举了二者的如此之多的差别,那我们如何编写跨浏览器的DHTML页面呢?一种方法是编写两个独立的页面,而在入口文件中根据浏览器的不同而重定向到不同的页面,如:


  <HTML><BODY>


  <Script Language="Javascript">


  isNS=(navigator.appName=="Netscape");


  if (isNS)


   window.location="ns.html";


  else


   window.location="ie.html";


  </Script>


  </BODY></HTML>


  这种方法简单,页面整洁,缺点是有很大冗余,毕竟一个页面中程序是少量的,大部分静态内容在两个浏览器中并没有区别,一旦静态的内容发生改变必须在两个页面中一起更改,而且当包含DHTML的页面增多时,每一个页面都需要三个页面来实现,增大了维护的负担。


  另一种方法是在同一个页面中集成两个浏览器的代码。在每一个实现特定功能的函数中都根据浏览器的不同分别写代码,如:


  <HTML><BODY>


  <Script Language="Javascript">


  isNS=(navigator.appName=="Netscape");


  function fun1(){


  if (isNS)


   //NS codes here


  else


   //IE codes here


  }

  </Script>

  </BODY></HTML>

  对于HTML代码也不同的部分,可以利用Javascript函数 document.writeln()来实现,例如对于层的定义,可以如下实现:

  <Script Language="Javascript">

   if(isNS)

   document.writeln("<layer id=/"layer1/" left=20 top=30 width=40 height=50 z-index=2>");

   else

   document.writeln("<div id=/"layer1/" style=/"position:absolute;left:20;top:30;width:40;height:50;z-index:2/">");

  </Script>

  Layer content here

  <Script Language="Javascript">

   if(isNS)

   document.writeln("</layer>");

   else

   document.writeln("</div>");


  </Script>

  这种实现方法维护简单,缺点是失去了页面编辑器所见即所得的特性(因为只有到运行时才能将层的定义写入浏览器,在编辑阶段它们只是些Javascript程序),调整层的坐标和大小都比较困难。在实际编程中可以先按一种浏览器的定义写,待调整完毕后再将它转成另一种定义。但总的来说,这种办法适合对HTML标准比较熟悉的开发人员。
最新Codex接入DeepSeek官方API教程(无需cc-switch) 阅读详情

相关推荐

医疗领域BGE-M3模型微调全流程:从数据准备到效果评估

本文详细介绍了医疗领域BGE-M3模型的微调全流程,从数据准备到效果评估。通过医疗数据微调,BGE-M3模型在临床问答、病历检索等场景中表现显著提升,能够准确理解医学术语之间的细微差别。文章还提供了实战练习代码和效果评估指标,帮助开发者快速掌握医疗文本嵌入模型的应用技巧。

weixin_29098367的博客 281

IE的HTML与DHTML手册(备忘)

常常为记不住IE的一些DOM对象头疼。在这里做一下备注。 http://msdn.microsoft.com/en-us/library/ms533050%28v=VS.85%29.aspx

mengzhongshi的专栏 535

Ubuntu桌面消失?可能是lightdm配置在捣鬼:详细解析/etc/lightdm.conf的优先级机制与实战修复

本文详细解析了Ubuntu系统因lightdm显示管理器配置错误导致桌面消失的问题。通过分析/etc/lightdm.conf的优先级加载机制,提供了从systemctl诊断、调试模式运行到实战修复配置语法错误(如缺失[Seat:*]组)的完整方案。文章还探讨了在系统无法启动时使用chroot或恢复模式进行高级救援,并对比了lightdm与gdm3在NVIDIA驱动环境下的不同表现,帮助用户高效恢复图形界面。

weixin_29313547的博客 420

IE与Mozilla下Dhtml的一些区别小结

IE与Mozilla下Dhtml的一些区别小结 1--12 是个 fason(咖啡人生) 的人总结的1 DOM上的接口基本上还是一致的,但经测试发现mozilla下的DOM更标准些,就算些法一样,IE下会有一些微小的区别,但无关要紧2. 事件模型上,这方面区别算比较大.mozilla下的e.target 相当于 ie下的event.srcElement,但细节上有区别,后者是返回一个html el

Intotherain1的专栏 1357

基于ZYNQ7020芯片(黑金开发板AX7020)之AXI-FULL DDR的PL与PS交互操作。

在该工程中我们使用了PS端的串口接收功能,PS端串口接收和发送分别有一个64字节的FIFO,但是因为串口接收阈值设置为16,所以固定接收16个字节数据后才会发生中断。此测试工程得到以前知识的总结和各大网友的支持,只希望可以为学习的你更进一步,大家一起学习才是真的开心。加油,国产芯片之路。

landyjzlai的博客 3189

CANOE-介绍 @014-基于CAPL的Someip测试(CANOE 15.0/16.0/17.0)【草稿】发送事件、方法

摘要:本文介绍了使用CANoe 16.0及更高版本配置SOME/IP测试环境的方法,包括硬件连接、工程配置和CAPL代码实现。SOME/IP是一种面向服务的车载通信协议,支持服务发现、事件推送和方法调用。文章详细说明了网络拓扑配置、数据库文件加载等步骤,并提供了CAPL代码示例,展示如何初始化多个应用端点(15个不同端口)和服务实例(73个服务),通过SomeIpOpenLocalApplicationEndpoint和SomeIpCreateProvidedServiceInstance函数实现。配置过程

沿流不止 424

2019手机浏览器排名_2019年手机浏览器市场份额排行榜,极简的夸克未上榜

在智能手机刚出来的时候,UC 浏览器曾经是网友的最爱,如今,由于它的功能过于臃肿,内容质量下降等原因丢失了不少的用户。这不,最近 StatCounter 发布了一份 2019 年的手机浏览器市场份额榜单,UC 已经不再是榜一,而被 Google 的 Chrome 浏览器所取代。至于广受网友好评的夸克浏览器则未上榜单。从全球的数据可以看出,Chrome 浏览器手机用户最多,其次是 Safari 浏览...

weixin_39644139的博客 1333

基于改进Unet的多场景水果图像分割与分类研究

本文针对复杂场景下的水果图像分割问题,提出了一种改进Unet模型。通过构建包含8类水果、3种成熟度及多种干扰场景的数据集,采用ResNet50与MobileNetV3作为骨干网络,并在跳跃连接层集成CBAM注意力机制。实验表明,改进模型在测试集上达到91.6%的mIoU,推理速度提升23%,特别在重叠水果和低光照场景表现突出。研究为农业视觉检测提供了有效解决方案。

AI的内部世界的博客 303

在 DHTML 代码和客户端应用程序代码之间实现双向通信

可使用 WebBrowser 控件将现有的动态 HTML (DHTML) Web 应用程序代码添加到 Windows 窗体客户端应用程序。You can use the WebBrowser control to add existing dynamic HTML (DHTML) Web application code to your Windows Forms client applicati...

博客 379

UDS自动化测试-Service 0x27(CAPL调用dll实现key计算)

相信读者基于Diagnostic/ISO TP Confighration中cdd、dll文件的测试并不陌生,本文基于其的基础上,介绍在capl中调用内置的函数diagGenerateKeyFromSeed实现27服务解锁,从而进行诊断自动化测试。本文基于4个byte的Seed、16个byte的Key的安全访问,实现27服务的自动化测试。需要加载项目使用的cdd文件,如果没有的情况下可以使用canoe例程中默认的cdd文件。

诊断协议那些事儿's blog 2052

【异常】XXL-JOB提示异常ERROR com.xxl.job.core.util.XxlJobRemotingUtil - connect timed out

打开XXL-JOB的ELK,发现一堆报错。

奶爸的编程之路,也就一周冷个三天 2046

什么是dojo

导读:   周二, 09/04/2007 - 14:13 — ppkosd   118   vote   Dojo 是一个用javascript语言实现的开源DHTML工具包。它是在几个项目捐助基础上建立起来的(nWidgets, Burstlib, f(m)), 这也是为什么叫它a /"unified/" toolkit的原因。Dojo的目标是解决开发DHTML应用程序遇到的那些,长期存

赵晓雷的专栏 1026

DeerFlow 系列教程 第四篇 | Sandbox 沙箱与 Sub-agent 子智能体协作详解

DeerFlow 系列教程第四篇介绍了两个关键子系统:Sandbox 沙箱系统和Sub-agent子智能体协作机制。沙箱系统通过虚拟路径映射、权限白名单、命令审计和容器隔离四重机制,为Agent提供安全的代码执行环境,使其能在隔离环境中执行文件操作和脚本运行。系统采用分层架构设计,包含应用层、工具层、审计层等,核心是定义标准交互接口的抽象基类。虚拟路径系统将Agent操作的虚拟路径映射到实际路径,确保安全性。这些功能使DeerFlow从对话助手进化为能处理复杂任务的Super Agent平台。

weixin_43674738的博客 284

Yahoo!User Interface Libray 介绍

第一章 简介Yahoo! User Interface Library(简称yui) 是一个使用JavaScript编写的工具和控件库。它利用DOM脚本,DHTML和AJAX来构造具有丰富交互功能的Web程序。yui也包含几个核心的CSS文件。yui中的所有组件已经以开源的形式发布,它们遵循BSD协议并且可以免费使用。可以从Sourceforge站点下载完整的项目文件,同时包含相关文档和示例。

周公(周金桥)的专栏 2274

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Yahoo! User Interface Library(简称yui)介绍

第一章 简介Yahoo! User Interface Library(简称yui) 是一个使用JavaScript编写的工具和控件库。它利用DOM脚本,DHTML和AJAX来构造具有丰富交互功能的Web程序。yui也包含几个核心的CSS文件。yui中的所有组件已经以开源的形式发布,它们遵循BSD协议并且可以免费使用。可以从Sourceforge站点下载完整的项目文件,同时包含相关文档和示

吕海鹏 in 优快云 Blog 1259

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

dhtml_DHTML乌托邦:使用JavaScript和DOM的现代Web设计

dhtmlI remember the first time I saw an image rollover on a web site, and being blown away by the sheer coolness of such a thing. Of course I immediately had to learn how to do it. However, I never re...

cundai5745的博客 175

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

跨浏览器 ajax_是AJAX跨浏览器吗?

跨浏览器 ajax Dojo开发人员Alex Russell的博客上正在进行一场引人入胜的辩论。 在浏览器内部看起来像Microsoft Word的ajaxWrite发行时引发了这场争论,辩论使人们质疑AJAX对于跨浏览器兼容性的含义(如果有的话)。 ajaxWrite不会使用像Writely这样的跨浏览器DHTML,而是使用可扩展用户界面语言(XUL) ,这意味着它将仅在Firefox之类的...

130

是AJAX跨浏览器吗?

有一个有趣的争论在事情道场开发商亚历克斯·罗素的博客 。 引发了释放ajaxWrite ,一个在浏览器中的Microsoft Word的外观类似,辩论质疑正是AJAX方法(如果有的话),跨浏览器的兼容性。 而不是使用跨浏览器DHTML状的Writely ,ajaxWrite使用可扩展用户界面语言(XUL) ,这意味着它只能在Mozilla浏览器如Firefox工作。 亚历克斯·拉塞尔认为,广告...

110

dojo是什么与选择dojo的理由

What Is Dojo? Dojo 是一个用javascript语言实现的开源DHTML工具包。它是在几个项目捐助基础上建立起来的(nWidgets, Burstlib, f(m)), 这也是为什么叫它a /"unified/" toolkit的原因。Dojo的目标是解决开发DHTML应用程序遇到的那些,长期存在 、历史问题。historical problems with DHTML 跨浏览器

shark's BLOG 1万+

DHTML乌托邦:使用JavaScript和DOM的现代Web设计

动态HTML,DHTML叫简称,是给一组Web开发技术,大多是在具有不平凡的用户输入功能的网页中使用的名称。 DHTML手段操纵HTML文档的文档对象模型,在风格上与信息指令CSS摆弄,并使用客户端JavaScript脚本,以配合一切融合在一起。 DHTML乌托邦:现代网页设计使用JavaScript和DOM 现代网页设计使用JavaScript和DOM:本文节选自SitePoint的新版本...

2323

dojo学习

Dojo是一个用javascript语言实现的开源DHTML工具包。Dojo的目标是解决开发DHTML应用程序遇到的那些,长期存在、历史问题(historical problems with DHTML)。跨浏览器问题。 Dojo是一个强大的面向对象JavaScript框架。主要由三大模块组成:Core、Dijit、DojoX。Core提供Ajax,events,packaging,CSS-ba...

GIS学习 763

【DOJO】初识Dojo

定义 Dojo是一个用JavaScript语言实现的开源DHTML工具包。它是在几个项目捐助基础上建立起来的(nWidgets,Burstlib, f(m)),这也是为什么叫它a u...

a2811055的博客 239

DOJO介绍和安装教程

Dojo 是一个用javascript语言实现的开源DHTML工具包。它是在几个项目捐助基础上建立起来的(nWidgets, Burstlib, f(m)), 这也是为什么叫它a /"unified/" toolkit的原因。Dojo的目标是解决开发DHTML应用程序遇到的那些,长期存在 、历史问题。historical problems with DHTML 跨浏览器问题。Dojo让你更

EasyJS 一个简单的JS框架 394

CodeIgniter Dojo Helper

在说明如何在CI中写DOJO助手类之前,我们先来认识DOJO和CodeIngiter。Dojo是一个用JavaScript语言实现的开源DHTML工具包。它是在几个项目捐助基础上建立起来的(nWidgets, Burstlib, f(m)),这也是为什么叫它a unified toolkit的原因。Dojo的目标是解决开发DHTML应用程序遇到的那些、长期存在 、历史问题,以及DHTML 跨浏览器问题。Dojo能够让你更容易使Web页面具有动态能力,或者在任何能够稳定支持JavaScript语言的环境中发挥

SatSun工作室 1205

dojo是什么?

dojo: Dojo是一个用JavaScript语言实现的开源DHTML工具包。它是在几个项目捐助基础上建立起来的(nWidgets, Burstlib, f(m)),这也是为什么叫它a unifined toolkit的原因。Dojo的目标是解决开发DHTML应用程序遇到

dojo 2085
上一篇: HTML4.0特性示例
下一篇: innerHTML的运用:新建层
jacob1
博客等级 码龄25年 6粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值