发布网友 发布时间:2022-04-24 04:14
共16个回答
懂视网 时间:2022-05-16 21:34
Netscape 最初开发 Mozilla 浏览器的时候,明智地决定支持 W3C 标准。因此,Mozilla 和 Netscape Navigator 4.x 以及 Microsoft Internet Explorer 遗留代码不完全向后兼容,比如后面将提到 Mozilla 不支持 。Internet Explorer 4 这些在 W3C 标准的概念出现之前建立的浏览器继承了很多古怪之处。本文中将讨论 Mozilla 的特殊模式,它为 Internet Explorer 和其他遗留浏览器提供了强大的 HTML 向后兼容功能。
我还将讨论 Mozilla 支持的非标准技术,如 XMLHttpRequest 和富文本编辑,因为当时 W3C 还没有对应的标准。其中包括:
HTML 4.01 和 XHTML 1.0/1.1
级联样式表(CSS):CSS Level 1、CSS Level 2 以及 CSS Level 3 的部分。
文档对象模型(DOM):DOM Level 1、 DOM Level 2 和 DOM Level 3 的部分
数学标记语言:MathML Version 2.0
可扩展标记语言(XML):XML 1.0、Namespaces in XML、Associating Style Sheets with XML Documents 1.0、Fragment Identifier for XML
XSL 转换:XSLT 1.0
XML Path 语言:XPath 1.0
资源描述框架:RDF
简单对象访问协议:SOAP 1.1
ECMA-262 修订版 3(JavaScript 1.5):ECMA
通用的跨浏览器编码技巧
虽然存在 Web 标准,但不同浏览器的行为并不完全相同(实际上同一个浏览器在不同的平台上行为也不相同)。很多浏览器,如 Internet Explorer 依然支持 W3C 之前的、从未在 W3C 符合浏览器中获得广泛支持的 API。
深入讨论 Mozilla 和 Internet Explorer 的区别之前,首先介绍一下使 Web 应用程序具备可扩展性以便日后增加新浏览器支持的一些基本方法。
因为不同的浏览器有时会为同样的功能使用不同的 API,因此经常会在代码中看到很多 if() else()
块,来区别对待不同的浏览器。下面的代码块用于 Internet Explorer:
. . . var elm; if (ns4) elm = document.layers["myID"]; else if (ie4) elm = document.all["myID"]; |
上述代码不具备可扩展性,如果需要支持新的浏览器,必须修改 Web 应用程序中所有这样的代码块。
避免为新浏览器重新编码最简单的办法就是抽象功能。不要使用层层嵌套的 if() else()
块,把通用的任务抽象成单独的函数可以提高效率。这样不但代码更易于阅读,还便于增加新客户机支持:
var elm = getElmById("myID"); function getElmById(aID){ var element = null; if (isMozilla || isIE5) ?element = document.getElementById(aID) else if (isNetscape4) element = document.layers[aID] else if (isIE4) element = document.all[aID]; return element; } |
上述代码仍然存在浏览器嗅探 或者检测用户使用何种浏览器的问题。浏览器嗅探一般通过用户代理完成,比如:
Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.5) Gecko/20031016 |
虽然使用用户代理来嗅探浏览器提供了所用浏览器的详细信息,但是出现新的浏览器版本时处理用户代理的代码可能出错,因而需要修改代码。
如果浏览器的类型无关紧要(假设禁止不支持的浏览器访问 Web 应用程序),最好通过浏览器本身的能力来嗅探。一般可以通过测试需要的 JavaScript 功能来完成。比如,与其使用:
if (isMozilla || isIE5) |
不如用:
if (document.getElementById) |
这样不用任何修改,在其他支持该方法的浏览器如 Opera 或 Safari 上也能工作。
但是如果准确性很重要,比如要验证浏览器是否满足 Web 应用程序的版本要求或者尝试避免某个 bug,则必须使用用户代理嗅探。
JavaScript 还允许使用内嵌条件语句,有助于提高代码的可读性:
var foo = (condition) ? conditionIsTrue : conditionIsFalse; |
比如,要检索一个元素,可以用如下代码:
function getElement(aID){ return (document.getElementById) ? document.getElementById(aID) : document.all[aID]; } |
回页首 |
Mozilla 和 Internet Explorer 的区别
首先讨论 Mozilla 和 Internet Explorer 在 HTML 行为方式上的区别。
工具提示
遗留浏览器在 HTML 中引入了工具提示,在链接上显示 alt
属性作为工具提示的内容。最新的 W3C HTML 规范增加了 title
属性,用于包含链接的详细说明。现代浏览器应该使用 title
属性显示工具提示,Mozilla 仅支持用该属性显示工具提示而不能用 alt
属性。
实体
HTML 标记可以包含多种实体,W3 标准体 专门作了规定。可以通过数字或者字符引用来引用这些实体。比如,可以用 #160 或者等价的字符引用
来引用空白字符
。
一些旧式浏览器,如 Internet Explorer,有一些怪异的地方,比如允许用正常文本内容替换实体后面的分号(;
):
  Foo    Foo |
Mozilla 将把上面的  
呈现为空格,虽然违反了 W3C 规范。如果后面紧跟着更多字符,浏览器就不能解析  
,如:
 12345 |
这样的代码在 Mozilla 中无效,因为违反了 W3 标准。为了避免浏览器的差异,应坚持使用正确的形式(
)。
回页首 |
DOM 差异
文档对象模型(DOM)是包含文档元素的树状结构。可以通过 JavaScript API 来操纵它,对此 W3C 已有标准。但是在 W3C 标准化之前,Netscape 4 和 Internet Explorer 4 以类似的方式实现了这种 API。Mozilla 仅实现了 W3C 标准不支持的那些遗留 API。
访问元素
未按照跨浏览器的方式检索元素的引用,应使用 document.getElementById(aID)
,该方法可用于 Internet Explorer 5.5+、Mozilla,是 DOM Level 1 规范的一部分。
Mozilla 不支持通过 document.elementName
甚至按照元素名来访问元素,而 Internet Explorer 则支持这种方法(也称为全局名称空间污染)。Mozilla 也不支持 Netscape 4 的 document.layers
方法和 Internet Explorer 的 document.all
方法。除了 document.getElementById
可以检索元素之外,还可用 document.layers
和 document.all
获得具有特定标签名称的全部文档元素列表,比如所有的
元素。
W3C DOM Level 1 使用 getElementsByTagName()
方法获得所有相同标签名的元素的引用。该方法在 JavaScript 中返回一个数组,可用于 document
元素,也可用于其他节点只检索对应的子树。要获得 DOM 树中所有元素的列表,可使用 getElementsByTagName(*)
。
表 1 中列出了 DOM Level 1 方法,大部分用于把元素移动到特定位置或切换其可视性(菜单、动画)。Netscape 4 使用 标签(Mozilla 不支持)作为可以任意定位的 HTML 元素。在 Mozilla 中,可使用
标签定位元素,Internet Explorer 也用它,HTML 规范中也包含它。
表 1. 用于访问元素的方法
方法 | 说明 |
document.getElementById( aId ) | 返回具有指定 ID 的元素的引用。 |
document.getElementsByTagName( aTagName ) | 返回文档中具有指定名称的元素数组。 |
遍历 DOM
Mozilla 通过 JavaScript 支持遍历 DOM 树的 W3C DOM API(如表 2 所示)。文档中每个节点都可使用这些 API 方法,可以在任何方向上遍历树。Internet Explorer 也支持这些 API,还支持原来用于遍历 DOM 树的 API,比如 children
属性。
表 2. 用于遍历 DOM 的方法
属性/方法 | 说明 |
childNodes | 返回元素所有子节点的数组。 |
firstChild | 返回元素的第一个子节点。 |
getAttribute( aAttributeName ) | 返回指定属性的值。 |
hasAttribute( aAttributeName ) | 返回一个 Boolean 值表明当前节点是否包含指定名称的属性。 |
hasChildNodes() | 返回一个布尔指表明当前节点是否有子节点。 |
lastChild | 返回元素的最后一个子节点。 |
nextSibling | 返回紧接于当前节点之后的节点。 |
nodeName | 用字符串返回当前节点的名称。 |
nodeType | 返回当前节点的类型。 值说明1元素节点2属性节点3文本节点4CDATA 选择节点5实体引用节点6实体节点7处理指令节点8注释节点9文档节点10文档类型节点11文档片断节点12符号节点 |
nodeValue | 返回当前节点的值。对于包含文本的节点,如文本和注释节点返回其字符串值。对于属性节点返回属性值。其他节点返回 null 。 |
ownerDocument | 返回包含当前节点的 document 对象。 |
parentNode | 返回当前节点的父节点。 |
previousSibling | 返回当前节点之前的相邻节点。 |
removeAttribute( aName ) | 从当前节点中删除指定的属性。 |
setAttribute( aName, aValue ) | 设置指定属性的值。 |
Internet Explorer 有一种非标准的特殊行为,这些 API 很多跳过(比如)新行字符生成的空白文本节点。Mozilla 则不跳过,因此有时候需要区分这些节点。每个节点都有一个 nodeType
属性指定了节点类型。比如,元素节点类型是 1,文本节点是 3,而注释节点是 8。仅处理元素节点最好的办法是遍历所有子节点,然后处理那些 nodeType 为 1 的节点:
HTML:Test cJavaScript: var myDiv = document.getElementById("foo"); var myChildren = myXMLDoc.childNodes; for (var i = 0; i < myChildren.length; i++) { if (myChildren[i].nodeType == 1){ // element node } } |
生成和操纵内容
Mozilla 支持向 DOM 动态增加内容的遗留方法,如 document.write
、document.open
和 document.close
。Mozilla 也支持 Internet Explorer 的 InnerHTML
方法,该方法基本上可以在任何节点上使用。但是不支持 OuterHTML
(围绕着元素添加标记,标准中也没有等价的方法)和 innerText
(设置节点的文本值,在 Mozilla 中可使用 textContent
)。
Internet Explorer 有一些非标准的、Mozilla 不支持的内容操作方法,包括检索值、插入文本以及邻近某个节点插入元素,比如 getAdjacentElement
和 insertAdjacentHTML
。表 3 说明了 W3C 标准和 Mozilla 操纵内容的方法,这些方法适用于任何 DOM 节点。
表 3. Mozilla 用于操纵内容的方法
方法 | 说明 |
appendChild( aNode ) | 创建新的子节点。返回新建子节点的引用。 |
cloneNode( aDeep ) | 创建调用节点的副本并返回。如果 aDeep 为 true,则复制该节点的整个子树。 |
createElement( aTagName ) | 创建并返回一个 aTagName 指定类型的无父 DOM 节点。 |
createTextNode( aTextValue ) | 创建并返回一个新的无父 DOM 文本节点,值由 aTextValue 指定。 |
insertBefore( aNewNode, aChildNode ) | 在 aChildNode 前插入 aNewNode,前者必须是当前节点的子节点。 |
removeChild( aChildNode ) | 删除 aChildNode 并返回对它的引用。 |
replaceChild( aNewNode, aChildNode ) | 用 aNewNode 替换 aChildNode 并返回被删除节点的引用。 |
文档片断
出于性能方面的原因,可以在内存中创建文档而不是处理已有文档的 DOM。DOM Level 1 Core 引入了文档片断,这是一种轻型文档包含一般文档接口的一个子集。比如没有 getElementById
但是有 appendChild
。很容易向已有文档添加文档片断。
Mozilla 使用 document.createDocumentFragment()
创建文档片断,该方法返回一个空的文档片断。
但是,Internet Explorer 的文档片断实现没有遵循 W3C 标准,仅仅返回一般的文档。
回页首 |
JavaScript 差异
Mozilla 和 Internet Explorer 的多数差异都和 JavaScript 有关。但问题通常源自浏览器向 JavaScript 公开的 API,比如 DOM 钩子。两种浏览器在核心 JavaScript 上区别不大,遇到的问题通常和时间有关。
JavaScript date 差异
Date
惟一的区别是 getYear
方法。根据 ECMAScript 规范(这是 JavaScript 所遵循的规范),该方法没有解决千年问题,在 2004 年运行 new Date().getYear()
将返回“104”。根据 ECMAScript 规范,getYear
返回的年份减去 1900 最初是为了在 1998 年返回“98”。ECMAScript Version 3 废止了 getYear
,用 getFullYear()
代替。Internet Explorer 修改了 getYear()
使其和 getFullYear()
类似,消除了千年问题,而 Mozilla 坚持采用标准的行为方式。
JavaScript 执行差异
不同的浏览器执行 JavaScript 的方式是不同的。比如,下列代码假设 script
块执行的时候 p
节点已经存在于 DOM 中:
...Loading... |
热心网友 时间:2022-05-16 18:42
首先,是最简单、直接、有效的避开法,不要去*网站、黑客网站,尽量去官方网站和信誉好的个人网站。某些网站修改首页后,每次浏览不仅仅是打开它的主页,还会弹出几个广告宣传窗口,占用大量资源还是小事,最惨要不断手动关窗口,如果遇到窗口连接新窗口的,关了一个又打开另一个,令人烦不胜烦。这一方面,IE就没有国产浏览器做得那么好,总不可能马上换用新软件吧。为了安全起见,首推避开法。假如你不想避开,干脆来个硬碰硬,就要认真看看下文讲述的各种保护措施。
第一节软件防护
软件防护的第一步是升级操作系统和浏览器,比如使用Win2000专业版+SP(ServicePack,服务工具包)2中文版或服务器版,不要用老掉牙的Win98。浏览器亦要升级为IE6,如果还在用5.0,中招可是自己找的。
图一
其次,安装免疫程序IEPersonalizer和防护软件超级兔子魔法。IEPersonalizer(图一)是一个免费软件,属于浏览器增强工具。可以对IE的外观进行完全改造。不但能够自定义IE的工具栏背景,更可以更改标题栏文字以及右上角的旋转徽标。让您的IE充分展示您的独特个性。另外,此软件还可以对Internet选项加以*,禁止其部分甚至全部功能,以保障您的IE设置不被更改。
图二
超级兔子魔法设置(图二)是一套修改Windows的软件,由四部分组成:魔法设定MagicSet、终极加速WinSpeed、注册表优化RegOpt、修理专家WinFix。这四部分可以运作,并可单独使用,它们的功能互有不同。IE首页相关的选项在魔法设定中,可以随时修改浏览器的启始页、版本号、标题。
第二节初级防护
如果首页地址栏已经变成了灰色,没法手动修改,可以新建一个文本文件,输入:
REGEDIT4
〔HKEY_CURRENT_USER\Software\Policies\Microsoft\InternetExplorer\ControlPanel〕HomePage=dword:00000000
在菜单“文件-保存”中≡癖4胬嘈臀��形募��缓笠裕悖颍幔悖耄�颍澹缥��执娴怠=幼牛�谧试垂芾砥髦校�诵?FONT color=#ff00ff>crack.reg,将它导入注册表就可以了。
现在的网站越来越*,不单止改了首页,还把注册表编辑器禁用,真是X@#$%#^……。
不能进入注册表,下面说的方法不全是废物吗?幸好,还有一招。打开一个新的记事本窗口,输入以下内容:
REGEDIT4
〔HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System〕〃DisableRegistryTools〃=dword:00000000
在菜单“文件———保存”中选择保存类型为所有文件,然后以disable.reg为名字存档。接着,在资源管理器中,运行disable.reg,将它导入注册表就可以了。
第三节高级防护
如果上述方法都不行,迫不得己只好使用极端手段,其实网站恶意修改客户端主页不外乎是下面几种。
一、JavaScript程序
JavaScript程序,在浏览网页时,把固定信息导入到操作系统注册表。在“开始--运行”里输入regedit可以进入注册表编辑器,打开HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\IE\Main主键就能看到被修改的字符串值。
IE首页的子键名称是StartPage(起始页),缺省值是http://www.microsoft.com/is�api/redir.dll?prd={SUB_PRD}&clcid={SUB_CLSID}&pver={SUB_PVER}&ar=home,即微软自己的页面,如果是中文Windows,可以直接进入中文微软。如果不是这个页面,意味着浏览器的首页已经被更改,可以在StartPage上点击鼠标右击,选择删除,或者修改成自己想要的网页,格式是http://网页名称。
因为我的机器没有被攻击,所以缺少WindowsTile(视窗标题)一项,若是出现了这个子键,你绝对不要留手,早删早着。不过,你想玩玩的话也可以,把它设置为自己的信息,微软的浏览器变成个人浏览器,那多过瘾,遇到小girl还可以吹嘘一番。
此外,起始页和视窗标题的值还存在于下面两个位置,一般的网站都不会修改它们,但很难保不碰上有人使用如此毒招,最好是三个地方一起改(图三)。
HKEY_CURRENT_USER\SOFTWARE\Microsoft\IE\MainHKEY_USERs\.DEFAULT\SOFTWARE\Microsoft\IE\Main
图三
二、升级到IE6
JavaScript是Sun开发的网页脚本程序,微软和Sun存在法律方面的纠纷,只能向用户提供使用4年前技术的JVM,IE6.0干脆不支持JVM(JavaVirtualMa�chine,Java虚拟机,你可以把它看成一个模拟器),IE6中用户将找不到可以使Win�dows运行基于Java语言的JVM程序,如果用户非得要用Java,就只能从OEM厂商那里索取,或从微软的网站上下载5MB的旧版JVM。
既然IE6不能运行JavaScript,自然没有首页被改的问题,因此,我很早就建立用户安装IE6.0,不仅可以防止恶意修改,它还拥有P3P(PrivacyPreferenceProject,个人私隐安全平台),防止不合格广告网站公司向你发送Cookies。
第四节注册表的重要性
注册表是一个包含硬件和软件设置信息的超大型数据库,如:硬件驱动、设置状态、操作系统初始化、应用软件关联、文件开启等,用注册表编辑器可以进行统一的修改。下面,我收集了一些对系统有重要影响的键值,掌握后可以更容易地控制你的电脑。
1、浏览器的主页设置
主键位置:
HKEY_CURRENT_USER\Software\Microsoft\InternetExplorer\Main
字符串键名:Start Page
作用:控制IE的首页,设置为“about:blank”可变成空白页
2、开始菜单上不显示“运行”菜单
主键位置:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
字符串键名:NoRun
作用:删除后可以恢复“运行”
3、开始菜单上不显示“关闭系统”
菜单主键位置:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
字符串键名:NoClose
作用:删除后可以恢复“关闭系统”,适用于网吧
4、开始菜单上不显示“注销”
菜单主键位置:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
字符串键名:NoLogOff
作用:防止使用者以其它用户名登陆,删除后可以恢复“注销”
5、在“我的电脑”里隐藏硬盘
主键位置:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
字符串键名:NoDrives
作用:防止用户乱改硬盘资料,删除后可以恢复
6、禁止注册表编辑工具
主键位置:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System
字符串键名:Disable
作用:不用多说,文章开头已经讲出了破解方法,当然,也可以直接删除
7、不显示桌面图标
主键位置:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
字符串键名:NoDesktop
作用:保持桌面清洁,删除后可以恢复
8、禁止使用DOS程序
主键位置:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\WinOldApp
字符串键名:Disabled
作用:防止用户以DOS程序进行破坏,删除后可以恢复
9、禁止进入DOS模式或DOS窗口
主键位置:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\WinOldApp
字符串键名:NoRealMode
作用:防止用户以DOS程序进行破坏,删除后可以恢复
10、登录视窗系统时出现的标题
主键位置:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Winlogon
字符串键名:LegalNoticeCaption
作用:修改登录信息,删除后可以恢复
11、登录视窗系统时出现的提示语句
主键位置:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Winlogon
字符串键名:LegalNoticeText
作用:修改登录信息,删除后可以恢复
12、浏览器的标题
主键位置:HKEY_CURREN_USER\Software\Microsoft\InternetExplorer\Main
字符串键名:WindowTitle
热心网友 时间:2022-05-16 20:00
我不知道你能不能打开我的电脑什么的不能,如果能,说明的浏览器故障还不是很大,但如故不能,那就麻烦了,我只能告诉你,修复一下IE了,我说的修复,不是单寸的重新安装IE那样,首先要将系统的关于IE部分的东西全部删除,包括到系统文件,以及注册表部分,之后重新安装IE
热心网友 时间:2022-05-16 21:35
楼上的不对,改用,重装的方法是不可取的.因为网络浏览器打不开通常是因为有病毒文件的制约或黑客侵入,也可能是系统编程错误.
因此,先用杀毒软件(最新的)杀毒,再用反黑客程序寻找黑客.若都不行,就要重装系统了.决不能取用新浏览器而忽视它不管,这样一来易损坏系统.
热心网友 时间:2022-05-16 23:26
前面的方法都太罗嗦,不彻底,最好是重装干净的系统,因为你的系统浏览器故障就是病毒或者其它恶意程序造成的.如果你自己没精力重装系统,花30元钱找电脑公司装也行.
注意在重装系统前,一定要把你有用的文件备份好!
热心网友 时间:2022-05-17 01:34
呵呵。。很简单的
你到添加删除程序里把IE给卸载后,然后重新安装,就可以了!!
或者就是升级IE就OK了。。。
我QQ:185966124不懂的话就来问我吧。。
热心网友 时间:2022-05-17 03:59
98%是病毒原因 这有个免费杀毒的网址 在地址栏选中国就可以杀毒 http://www.trendmicro.com.cn/housecall/start_corp.asp
如果不能ie不能打开的话就要找个杀毒软件升级到最新的病毒库后杀毒
热心网友 时间:2022-05-17 06:40
系统软件冲突,把冲突软件找出来删掉一个就可以了。(比如你是不是安装了两个杀毒软件。)
热心网友 时间:2022-05-17 09:38
下载3721试试吧,,可以很好的修复ie,插件和恶意代码之类的(好像你不能上ie怎么下载?),试试让朋友用qq或邮件发送给你吧
www.3721.com
热心网友 时间:2022-05-17 12:53
试试建一个IE的快捷方式,用快捷方式打开。
热心网友 时间:2022-05-17 16:24
也有可能是软件兼容性的问题~可能你新装的什么软件和IE冲突……
热心网友 时间:2022-05-17 20:12
都是ie的内核浏览器都没有用的,你重做系统吧,我这贴也不要分,但是是最省事的方法,完了你ghost一把下次就没事了!分别给我!自己留着都多问点问题吧!
顺便鄙视李霞:她骂全体韩国艺人是垃圾!
热心网友 时间:2022-05-18 00:17
可能中震荡波了,杀毒或者重拷系统
热心网友 时间:2022-05-18 04:38
你可以下载一个firefox先用,很好用的!
http://www.firefoxcn.com/
可能是系统问题!
热心网友 时间:2022-05-18 09:16
这情况我碰过,当时以为不能上网,其实是浏览器坏了.修复或换一个都行.一般重装IE不管用.重装系统倒行.就是麻烦.
热心网友 时间:2022-05-18 14:11
我也遇到过这些问题,你只要换个浏览器开网页就可以了,比如Maxthon就行了