`
lovnet
  • 浏览: 6904124 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

再战浏览器兼容

阅读更多
  1. 也许你也喜欢用document.all.*的写法来取得一个页面元素的引用,那么这个习惯是很糟糕的,这个语法只有IE支持,火狐里面是不行的。两者都支持的方法是:document.getElementById(),如果你嫌这个方法输入太麻烦可以简化一下:var $=function (id){return document.getElementById(id);} 后面就可以这样写了$("div");这种简化偷师至Prototype
  2. 如果要取到页面元素的内容object.innerHTML是没有问题的,innerTextIE里通行,在火狐里面是textContent
  3. 也许你和我一样喜欢使用event.srcElement,但是在火狐里面是event.target,例如
    <input id="Button2" type="button" value="Test" onclick="alert(event.target.id)" />
    而且注意这里还有一个小问题,event必须作为参数传递进去;
    下面的方法是不对的:

    function TestEvent()

    {

    alert(event.target.id);//这里火狐会提示event未定义

    }

    <input id="Button3" type="button" value="TestEvent" onclick="TestEvent(event)" />

    正确的写法:

    function TestEvent(event)

    {

    alert(event.target.id);

    }

    <input id="Button3" type="button" value="TestEvent" onclick="TestEvent(event)" />

  4. 对于事件源我们还是期望有一个统一的使用方法,这里我们可以通过funciton.caller来暗度陈仓:
    functiongetEvent()

    {

    if(document.all)returnwindow.event;//ie

    func
    =getEvent.caller;//这是该方法的关键

    while(func!=null){

    vararg0=func.arguments[0];

    if(arg0){if((arg0.constructor==Event||arg0.constructor==MouseEvent)||(typeof(arg0)=="object"&&arg0.preventDefault&&arg0.stopPropagation)){returnarg0;}}

    func
    =func.caller;

    }


    returnnull;

    }


    functiongetSrcElement()

    {

    varevt=getEvent();

    varelement=evt.srcElement||evt.target;

    returnelement;

    }


    functionTestCommonEvent()

    {

    varsrc=getSrcElement();//我们就可以使用这样一个统一的方式来获得事件源

    alert(src.id);

    }


  5. 使用.net类库我们这里使用可以很方便的引入System.Xml.Xslnamespace来进行XSLT转换。代码简单
    XslTransformxslt=newXslTransform();
    xslt.Load(
    "print_root.xsl");
    XmlDocumentdoc
    =newXmlDocument();
    doc.Load(
    "library.xml");
    //Createanewdocumentcontainingjusttheresulttreefragment.
    XmlNodetestNode=doc.DocumentElement.FirstChild;
    XmlDocumenttmpDoc
    =newXmlDocument();
    tmpDoc.LoadXml(testNode.OuterXml);
    //Passthedocumentcontainingtheresulttreefragment
    //totheTransformmethod.
    Console.WriteLine("Passing"+tmpDoc.OuterXml+"toprint_root.xsl");
    xslt.Transform(tmpDoc,
    null,Console.Out,null);

    数据是固定的只是转换一下样式,这种需求在Web应用中还是很常见的,我们知道这样大大减少了客户端与服务器端的往返次数和服务器端的计算压力。那么客户端有这个能力么?

    MSDN上我们也找到了使用Javascript进行客户端XSLT转换的解决方案

    varxslt=newActiveXObject("Msxml2.XSLTemplate.3.0");
    varxslDoc=newActiveXObject("Msxml2.FreeThreadedDOMDocument.3.0");
    varxslProc;
    xslDoc.async
    =false;
    xslDoc.load(
    "createProcessor.xsl");
    if(xslDoc.parseError.errorCode!=0){
    varmyErr=xslDoc.parseError;
    WScript.Echo(
    "Youhaveerror"+myErr.reason);
    }
    else{
    xslt.stylesheet
    =xslDoc;
    varxmlDoc=newActiveXObject("Msxml2.DOMDocument.3.0");
    xmlDoc.async
    =false;
    xmlDoc.load(
    "books.xml");
    if(xmlDoc.parseError.errorCode!=0){
    varmyErr=xmlDoc.parseError;
    WScript.Echo(
    "Youhaveerror"+myErr.reason);
    }
    else{
    xslProc
    =xslt.createProcessor();
    xslProc.input
    =xmlDoc;
    xslProc.addParameter(
    "param1","Hello");
    xslProc.transform();
    document.getElementById(
    "outputdiv").innerHTML=xslProc.output;
    }

    }

    找到解决方案我们并没有开心多久,你知道浏览器兼容是每一个

    web开发者的隐忧,显然上面的解决方案太微软太IE了。我们需要冷静一下,我们的目标是要兼容Firefox

    W3C DOMdocument.implementation属性作为使脚本找出当前环境实现了哪些DOM模块的一个途径。最后的解决方案是这个样子:


1functionXsltTransform(xslfile)
2
3{
4
5if(typeof(window.ActiveXObject)!='undefined')
6
7{
8
9//ie
10
11try
12
13{
14
15varxmlDoc=newActiveXObject("Msxml2.DOMDocument.3.0");
16
17varxslDoc=newActiveXObject("Msxml2.FreeThreadedDOMDocument");
18
19xmlDoc.async=false;
20
21xslDoc.async=false;
22
23xmlDoc.loadXML(document.getElementById("xmlContent").value.replace(/\r\n/gi,""));
24
25xslDoc.load(xslfile);
26
27
28
29varoTemplate=newActiveXObject("Msxml2.XSLTemplate");
30
31oTemplate.stylesheet=xslDoc;
32
33varoProcessor=oTemplate.createProcessor();
34
35oProcessor.input=xmlDoc.documentElement;
36
37
38
39oProcessor.addParameter("parameter",'<%=count%>');
40
41oProcessor.transform();
42
43
44
45document.getElementById('div').innerHTML=oProcessor.output;
46
47
48
49}catch(e){
50
51
52
53}
54
55}
56
57elseif(document.implementation&&document.implementation.createDocument)
58
59{
60
61//ff
62
63try
64
65{
66
67varparser=newDOMParser();
68
69varxmlDoc;
70
71if(document.getElementById("xmlContent").value=="")
72
73xmlDoc=parser.parseFromString(text,"text/xml");
74
75else
76
77xmlDoc=parser.parseFromString(document.getElementById("xmlContent").value.replace(/\r\n/gi,""),"text/xml");
78
79
80
81xmlDoc.async=false;
82
83
84
85varxslDoc=document.implementation.createDocument("","",null);
86
87xslDoc.async=false;
88
89xslDoc.load(xslfile);
90
91
92
93//定义XSLTProcessor对象
94
95varxsltProcessor=newXSLTProcessor();
96
97xsltProcessor.importStylesheet(xslDoc);
98
99xsltProcessor.setParameter(null,"parameter",'<%=count%>');
100
101//transformToDocument方式
102
103varresult=xsltProcessor.transformToDocument(xmlDoc);
104
105document.getElementById('div').innerHTML=result.documentElement.textContent;
106
107}catch(e){
108
109}
110
111}
112
113}
114
115jet
116
坚强2002和你一起回头再说...
分享到:
评论

相关推荐

    IE11无法保存浏览器兼容性视图设置的解决方法.docx

    IE11无法保存浏览器兼容性视图设置的解决方法 概述: IE11浏览器的兼容性视图设置无法保存是一个常见的问题,本文将为读者提供三个解决方法,以帮助读者解决这个问题。 知识点1:什么是IE11浏览器的兼容性视图设置...

    网络游戏-用于多浏览器的基于网络的应用的方法和装置.zip

    1. **跨浏览器兼容性**:网络游戏的首要挑战之一就是实现跨浏览器兼容性。不同的浏览器可能支持不同的Web技术,如JavaScript、HTML5和CSS3,因此开发者需要确保游戏在Chrome、Firefox、Safari、Edge等主流浏览器上都...

    网络工具-浏览器-智猫页游助手免费下载.zip

    2. **浏览器兼容性**:既然提到“浏览器”,我们可以假设这款工具是以浏览器插件的形式存在,可能支持主流的浏览器,如Chrome、Firefox、Edge等,以扩展的形式安装并运行。 3. **免费服务**:标题中的“免费下载”...

    chromedriver驱动2.30兼容谷歌58和59

    总的来说,"chromedriver驱动2.30兼容谷歌58和59"意味着这个版本的驱动是专门为这两个浏览器版本优化的,能够帮助开发者在进行Web自动化测试时,有效地控制和测试基于Chrome 58或59的网页应用。正确地使用和配置...

    【Web网页设计制作-毕业设计期末大作业】星球防御战网页游戏源码.zip

    8. 浏览器兼容性:由于不同的浏览器可能对某些技术的支持程度不同,开发过程中需要注意代码的兼容性,确保游戏在主流浏览器中都能正常运行。 9. 用户体验:除了技术层面,还需要考虑游戏的易用性和可玩性,如游戏...

    新剑侠情缘HTML版本的一个Demo

    6. **跨浏览器兼容性**:考虑到兼容性问题,开发者可能使用了polyfill(补丁函数)或条件语句来确保代码在不同浏览器上都能正常运行。例如,某些新的API在旧版本的浏览器中可能不支持,这时就需要使用polyfill来模拟...

    Pulse Classic:用于经典 wow 的 lua 浏览器-开源

    使用Pulse Classic,玩家可以直接在Windows 32位环境下运行,如文件名"pulse-classic-win32-ia32"所示,这确保了广泛的兼容性。无论你的系统配置如何,都能享受到这款工具带来的便利。 在实际操作中,Pulse Classic...

    nerv:出色的快速React替代品,与IE8和React 16兼容

    Nerv是基于虚拟域JavaScript(TypeScript)库,具有相同的React 16 API,可提供更高的性能,更小的包装尺寸和更好的浏览器兼容性。产品特点 :atom_symbol: 相同的React API,不需要“ nerv-compat” :crossed_swords...

    CSS禅意花园

    4. **浏览器兼容性问题**:学习如何处理不同浏览器之间的差异,对于确保网站在所有平台上都能正常工作非常重要。 5. **响应式设计与移动优先**:随着移动设备的普及,创建能够在各种尺寸屏幕上良好展示的网页变得...

    《CSS禅意花园》中文版

    本书不仅介绍Web标准的形成过程,还探讨了浏览器兼容性问题,说明了为何Web标准对于设计师和开发者至关重要。一个遵循标准的Web设计,可以确保其网页在不同的浏览器和操作系统中具有更好的兼容性,且对有特殊需求的...

    再见-jQuery:IE失去了浏览器之战,该继续前进了。 感谢您的服务jQuery:folded_hands:

    标题"再见-jQuery:IE失去了浏览器之战,该继续前进了。 感谢您的服务jQuery"揭示了这一转变,意味着我们正处在向更高效、更现代的开发方式过渡的时期。 IE(Internet Explorer)浏览器曾是市场主导,但随着其市场...

    brogue:浏览器中的无赖类实验

    JavaScript的跨平台特性使得这个实验能在各种不同的浏览器上运行,为玩家提供了广泛的设备兼容性。同时,JavaScript的异步处理能力也使其能够处理复杂的事件循环,适应游戏的实时性需求。 文件名"brogue-master...

    hjswj皇家守卫战塔防.rar

    H5游戏开发通常采用WebGL、CSS3、JavaScript等技术,具有开发周期短、更新灵活、兼容性强的特点。 2. **手游设计**:作为一款手游,其设计需要考虑到移动设备的特性,如触摸屏操作、有限的屏幕空间以及用户在移动...

    hv-monsterdb-userscript:MMM-MONSTER数据库!

    下载从下载脚本: hv-monsterdb.es2020.user.js (为获得更好的性能而推荐):仅与最新的现代浏览器兼容。 hv-monsterdb.es5.user.js :也兼容旧的浏览器。 您还可以从下载“每晚”构建。安装将脚本安装到您​​的...

    RogueType:基于浏览器的流氓类游戏

    唯一的系统要求是与ES6兼容的Web浏览器,键盘,最好是宽屏显示器。 游戏可以完全玩完并且可以打败,因此可以说是“完成”的游戏,但实际上距离完成还很遥远。 播放一会儿后,向下滚动并阅读有关我计划实现的其他...

    html游戏-勇士斗恶龙

    8. 浏览器兼容性:虽然HTML5标准得到了广泛支持,但不同浏览器对某些特性可能存在差异,开发者需要测试并适配各种浏览器,确保游戏在主流浏览器上的正常运行。 9. 性能优化:HTML5游戏可能面临性能挑战,尤其是在...

    CSS禅意花园(Web视觉艺术设计的王者之书)ch01

    浏览器之战与Web标准的呼唤** 在那个时代,微软和网景两家浏览器巨头的竞争加剧了标准的混乱,它们各自推出私有扩展,导致同一段HTML代码在不同浏览器中呈现的效果迥异。这种局面迫使Web开发者不得不为每个主要...

Global site tag (gtag.js) - Google Analytics