Maison > interface Web > js tutoriel > Analyse détaillée des performances de compatibilité en JavaScript

Analyse détaillée des performances de compatibilité en JavaScript

黄舟
Libérer: 2017-10-21 11:26:05
original
1707 Les gens l'ont consulté


1. Problème document.form.item
Problème :
Il y a

<span style="font-family:&#39;微软雅黑&#39;, &#39;Microsoft YaHei&#39;;">document.formName.item("itemName")<br/></span>
Copier après la connexion

comme ça dans l'instruction de code ne peut pas être exécuté sous FF
Solution :
Utilisez à la place

<span style="font-family:&#39;微软雅黑&#39;, &#39;Microsoft YaHei&#39;;">document.formName.elements["elementName"]<br/></span>
Copier après la connexion


2. Classe de collection Problème d'objet
Problème :
De nombreux objets de collection dans le code utilisent (), qui est accepté par IE mais pas par FF
Solution : utilisez
à la place > [ ] comme opération d'indice, par exemple :

document.getElementsByName("inputName")(1) 改为 document.getElementsByName("inputName")[1]
Copier après la connexion

3. window.event problème :

utilise window event ne peut pas. être exécuté sur FF Solution :
L'événement de FF ne peut être utilisé que sur la scène où l'événement se produit. Ce problème ne peut pas encore être résolu. Vous pouvez transmettre l'événement à la fonction pour contourner le problème :

<span style="font-family:&#39;微软雅黑&#39;, &#39;Microsoft YaHei&#39;;">onMouseMove = "functionName(event)"<br/>function functionName (e) {<br/>    e = e || window.event;<br/>    ......<br/>}<br/></span>
Copier après la connexion

4. Le problème de l'utilisation de l'identifiant de l'objet HTML comme nom d'objet <🎜. > Problème :
Dans
IE, l'ID de l'objet HTML peut être utilisé directement comme nom de variable d'objet subordonné du document, mais ne peut pas être utilisé dans FF Solution : .
Utilisez le standard
getElementById lors de l'utilisation de variables d'objet. ("idName")5 Le problème de l'utilisation de la chaîne idName pour obtenir l'objet
Problème :

. Dans
IE, vous pouvez utiliser eval("idName") pour obtenir l'identifiant car L'objet HTML de idName ne peut pas être utilisé dans FF Solution :
Utilisez
getElementById("idName" ) au lieu de eval("idName")6. Nom de la variable et certains Même problème avec l'identifiant de l'objet HTML
Problème :

Dans
FF, car l'identifiant de l'objet n'est pas utilisé comme nom de l'objet HTML, vous pouvez utiliser le même nom de variable que l'identifiant de l'objet HTML, mais il ne peut pas être utilisé dans IESolution :
Lors de la déclaration des variables, ajoutez toujours
var pour éviter toute ambiguïté, afin qu'il puisse également fonctionner normalement dans IE Il est préférable de ne pas utiliser
L'identifiant de l'objet HTML a le même nom de variable pour réduire les erreurs 7. et event.y problèmes
Problème :

Dans
IE, l'objet événement a un attribut x, y, il n'y a pas de dans FF Solution :
Dans
FF, l'équivalent de event.x est event.pageX, mais event.pageX n'a ​​pas dans IE Par conséquent,
event.clientX est utilisé à la place de event.x. dans IE. event.clientX a une différence subtile avec event.pageX, c'est-à-dire que la barre de défilement devrait être exactement la même, ce qui peut ressembler à ceci :
mX = event.x ? x : event.pageX;

Ensuite utilisez
mX pour remplacer event.x8 Concernant le problème de frame
:

Vous pouvez utiliser window. .testFrame pour obtenir le cadre dans
IE, mais pas dans FFSolution :

<span style="font-family:&#39;微软雅黑&#39;, &#39;Microsoft YaHei&#39;;">window.top.document.getElementById("testFrame").src = &#39;xx.htm&#39;<br/>window.top.frameName.location = &#39;xx.htm&#39;<br/></span>
Copier après la connexion
Récupérer les attributs de l'élément

Dans
FF, les attributs que vous définissez doivent être obtenus par getAttribute()10. Dans FF, il n'y a pas de problème parentElement, parement.children mais parentNode, parentNode.childNodes
:
La signification de l'indice de childNodes est différente dans IE et FF. Des nœuds de texte vierges seront insérés dans les childNodes de FF
Solution :

Vous pouvez éviter ce problème via le nœud
. getElementsByTagName() Problème :
Lorsque le nœud dans
html est manquant, IE et FF interprètent parentNode différemment, par exemple :

<span style="font-family:&#39;微软雅黑&#39;, &#39;Microsoft YaHei&#39;;"><form><br/><table><br/><input/><br/></table><br/></form><br/></span>
Copier après la connexion

FF中 input.parentNode 的值为form,而IE中 input.parentNode 的值为空节点
问题:
FF中节点自己没有 removeNode 方法
解决方法:
必须使用如下方法 node.parentNode.removeChild(node)

11. const 问题
问题:
IE中不能使用 const 关键字
解决方法:
var 代替

12. body 对象
FF的 body 在 body 标签没有被浏览器完全读入之前就存在,而IE则必须在 body 完全被读入之后才存在
这会产生在IE下,文档没有载入完时,在body上appendChild会出现空白页面的问题
解决方法:
一切在body上插入节点的动作,全部在onload后进行

13. url encoding
问题:
一般FF无法识别js中的&
解决方法:
js中如果书写url就直接写&不要写&

14. nodeName 和 tagName 问题
问题:
FF中,所有节点均有 nodeName 值,但 textNode 没有 tagName 值,在IE中,nodeName 的使用有问题
解决方法:
使用 tagName,但应检测其是否为空

15. 元素属性
IE下 input.type 属性为只读,但是FF下可以修改

16. document.getElementsByName() 和 document.all[name] 的问题
问题:
IE中,getElementsByName()、document.all[name] 均不能用来取得 p 元素
是否还有其它不能取的元素还不知道(这个问题还有争议,还在研究中)

17. 调用子框架或者其它框架中的元素的问题
IE中,可以用如下方法来取得子元素中的值

document.getElementById("frameName").(document.)elementName
window.frames["frameName"].elementName
Copier après la connexion

FF中则需要改成如下形式来执行,与IE兼容:

<span style="font-family:&#39;微软雅黑&#39;, &#39;Microsoft YaHei&#39;;">window.frames["frameName"].contentWindow.document.elementName<br/>window.frames["frameName"].document.elementName<br/></span>
Copier après la connexion

18. 对象宽高赋值问题
问题:
FireFox中类似 obj.style.height = imgObj.height 的语句无效
解决方法:
统一使用

<span style="font-family:&#39;微软雅黑&#39;, &#39;Microsoft YaHei&#39;;">obj.style.height = imgObj.height + "px";<br/></span>
Copier après la connexion

19. innerText的问题
问题:
innerText 在IE中能正常工作,但是 innerText 在FireFox中却不行
解决方法:
在非IE浏览器中使用textContent代替innerText


20. event.srcElement和event.toElement问题
问题:
IE下,even对象有srcElement属性,但是没有target属性;Firefox下,even对象有target属性,但是没有srcElement属性
解决方法:

<span style="font-family:&#39;微软雅黑&#39;, &#39;Microsoft YaHei&#39;;">var source = e.target || e.srcElement;<br/>var target = e.relatedTarget || e.toElement;<br/></span>
Copier après la connexion

21. 禁止选取网页内容
问题:
FF需要用CSS禁止,IE用JS禁止
解决方法:
IE:

<span style="font-family:&#39;微软雅黑&#39;, &#39;Microsoft YaHei&#39;;">obj.onselectstart = function() {return false;}<br/></span>
Copier après la connexion


FF: -moz-user-select:none;
22. 捕获事件
问题:
FF没有setCapture()、releaseCapture()方法
解决方法:
IE:

<span style="font-family:&#39;微软雅黑&#39;, &#39;Microsoft YaHei&#39;;">obj.setCapture(); <br/>obj.releaseCapture();</span>
Copier après la connexion

FF:
window.captureEvents(Event.MOUSEMOVE|Event.MOUSEUP);

<span style="font-family:&#39;微软雅黑&#39;, &#39;Microsoft YaHei&#39;;">window.releaseEvents(Event.MOUSEMOVE|Event.MOUSEUP);<br/>if (!window.captureEvents) {<br/>       o.setCapture();<br/>}else {<br/>       window.captureEvents(Event.MOUSEMOVE|Event.MOUSEUP);<br/>}<br/>if (!window.captureEvents) {<br/>       o.releaseCapture();<br/>}else {<br/>       window.releaseEvents(Event.MOUSEMOVE|Event.MOUSEUP);<br/>}</span>
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal