Dans ce qui suit, IE est utilisé à la place d'Internet Explorer et MF est utilisé à la place de Mozzila Firefox
1. Problème document.form.item
(1)Problèmes existants :
Il existe de nombreuses instructions telles que document.formName.item("itemName") dans le code existant, qui ne peuvent pas être exécutées sous MF.
(2)Solution :
Utilisez plutôt document.formName.elements["elementName"]
(3)Autres
Voir 2
2. Problèmes avec les objets de collection
(1)Problèmes existants :
De nombreux objets de classe de collection dans le code existant utilisent () lors de leur accès, IE peut l'accepter, mais MF ne le peut pas.
(2)Solution :
Utilisez plutôt [] pour l'abonnement. Par exemple : document.forms("formName") est remplacé par document.forms["formName"].
Autre exemple : document.getElementsByName("inputName")[1] est remplacé par document.getElementsByName("inputName")[1]
(3) Autres
3. window.event
(1)Problèmes existants :
Ne fonctionne pas sur MF en utilisant window.event
(2)Solution :
L'événement de MF ne peut être utilisé que sur la scène où l'événement se produit, et ce problème ne peut pas encore être résolu. Cela peut être modifié comme ceci :
Code original (peut fonctionner dans IE) :
<input type="button" name="someButton" value="Submit" onclick="javascript:gotoSubmit()"/>
...
<langage de script="javascript">
fonction gotoSubmit() {
...
alert(window.event); // utilise window.event
...
}
</script>
Nouveau code (peut s'exécuter sous IE et MF) :
<input type="button" name="someButton" value="Submit" onclick="javascript:gotoSubmit(event)"/>
...
<langage de script="javascript">
fonction gotoSubmit(evt) {
evt = evt ? evt : (fenêtre.événement ? fenêtre.événement : null);
...
alerte (evt); // utilise evt
...
}
</script>
De plus, si la première ligne du nouveau code ne change pas et est identique à l'ancien code (c'est-à-dire que l'appel gotoSubmit ne donne pas de paramètres), il ne s'exécutera toujours que dans IE, mais aucune erreur ne se produira. Par conséquent, la partie tpl de cette solution est toujours compatible avec l’ancien code.
4. Le problème de l'utilisation de l'identifiant de l'objet HTML comme nom d'objet
(1)Problèmes existants
Dans IE, l'ID de l'objet HTML peut être utilisé directement comme nom de variable de l'objet subordonné du document. Pas possible en MF.
(2)Solution
Utilisez getElementById("idName") au lieu de idName comme variable d'objet.
5. Problème d'obtention d'un objet à l'aide de la chaîne idName
(1)Problèmes existants
Dans IE, vous pouvez utiliser eval(idName) pour obtenir l'objet HTML avec l'identifiant idName, mais pas dans MF.
(2)Solution
Utilisez getElementById(idName) au lieu de eval(idName).
6. Le problème que le nom de la variable est le même que l'ID d'un objet HTML
(1)Problèmes existants
Dans MF, étant donné que 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 pas dans IE.
(2)Solution
Lors de la déclaration de variables, ajoutez toujours var pour éviter toute ambiguïté, afin qu'elles puissent s'exécuter normalement dans IE.
De plus, il est préférable de ne pas prendre le même nom de variable que l'identifiant de l'objet HTML afin de réduire les erreurs.
(3)Autres
Voir question 4.
7. Problèmes Event.x et event.y
(1)Problèmes existants
Dans IE, l'objet événement a les attributs x, y, mais pas dans MF.
(2)Solution
Dans MF, l'équivalent de event.x est event.pageX. Mais event.pageX n'est pas disponible dans IE.
Par conséquent, event.clientX est utilisé à la place de event.x. Cette variable existe également dans IE.
Il existe des différences subtiles entre event.clientX et event.pageX (lorsque la page entière comporte des barres de défilement), mais elles sont équivalentes la plupart du temps.
Si vous voulez que ce soit exactement la même chose, vous pouvez vous donner un peu plus de mal :
mX = événement.x ? événement.x : événement.pageX;
Utilisez ensuite mX au lieu de event.x
(3)Autres
event.layerX existe à la fois dans IE et MF. La question de savoir si la signification spécifique est différente n'a pas encore été testée.
8. À propos du cadre
(1)Problèmes existants
Dans IE, vous pouvez utiliser window.testFrame pour obtenir le cadre, mais pas dans mf.
(2)Solution
La principale différence entre mf et ie dans l’utilisation de frame est :
Si les attributs suivants sont écrits dans la balise frame :
<frame src="xx.htm" id="frameId" name="frameName" />
Ensuite, ie peut accéder à l'objet fenêtre correspondant à ce cadre via l'identifiant ou le nom, tandis que mf ne peut accéder à l'objet fenêtre correspondant à ce cadre que via le nom. Par exemple, si la balise de cadre ci-dessus est écrite dans le htm à l'intérieur de la fenêtre supérieure, alors. on peut y accéder comme ça
c'est-à-dire : window.top.frameId ou window.top.frameName pour accéder à cet objet fenêtre
mf : cet objet window n'est accessible que via window.top.frameName.
De plus, window.top.document.getElementById("frameId") peut être utilisé à la fois dans mf et ie pour accéder à la balise frame et window.top.document. . getElementById("testFrame").src = 'xx.htm' pour changer le contenu du cadre, vous pouvez également utiliser window.top.frameName.location = 'xx.htm' pour changer le contenu du cadre. description du frame et de la fenêtre, voir l'article bbs 'window and frame' et les tests dans le répertoire /test/js/test_frame/
----adun 2004.12.09 Modification
9. Dans mf, les attributs définis par vous-même doivent être obtenus par getAttribute()
10. Il n'y a pas de parentElement parement.children dans mf mais utilisez
parentNode parentNode.childNodes
La signification de l'indice de childNodes est différente dans IE et MF utilise la spécification DOM, et les nœuds de texte vides seront insérés dans childNodes.
Généralement, ce problème peut être évité grâce à node.getElementsByTagName().
Lorsqu'un nœud manque en HTML, IE et MF interprètent parentNode différemment, par exemple
<formulaire>
<tableau>
<entrée/>
</table>
</form>
La valeur de input.parentNode dans MF est form, tandis que la valeur de input.parentNode dans IE est un nœud vide.
Il n'existe pas de méthode RemoveNode pour les nœuds dans MF. Vous devez utiliser la méthode suivante node.parentNode.removeChild(node)
11. .const Problème
(1)Problèmes existants :
Le mot-clé const ne peut pas être utilisé dans IE. Tel que const constVar = 32; Il s'agit d'une erreur de syntaxe dans IE.
(2)Solution :
N'utilisez pas const, utilisez plutôt var.
12. objet corporel
Le corps de MF existe avant que la balise body ne soit complètement lue par le navigateur, tandis qu'IE doit exister après la lecture complète du corps.
13. Encodage de l'url.
En js, si vous écrivez une URL, écrivez simplement "ne pas écrire". Par exemple, var url = 'xx.jsp?objectName=xx&objectEvent=xxx';
frm.action = url, alors il est très probable que l'url ne s'affichera pas normalement et que les paramètres ne soient pas correctement transmis au serveur. Généralement, le serveur signalera une erreur indiquant que le paramètre n'est pas trouvé. Bien sûr, l'exception. c'est s'il est en tpl, car tpl est conforme à la spécification XML et l'exigence & est écrite sous la forme &
Généralement, MF ne peut pas reconnaître &
14. Problème nodeName et tagName
(1)Problèmes existants :
Dans MF, tous les nœuds ont une valeur nodeName, mais textNode n'a pas de valeur tagName. Dans IE, l'utilisation de nodeName ressemble à
Il y a un problème (je n'ai pas testé la situation précise, mais mon IE est mort plusieurs fois).
(2)Solution :
Utilisez tagName mais devrait détecter s'il est vide.
15. Attributs des éléments
L'attribut input.type est en lecture seule sous IE, mais peut être modifié sous MF.
16. Problèmes avec document.getElementsByName() et document.all[name]
(1)Problèmes existants :
Dans IE, getElementsByName() et document.all[name] ne peuvent pas être utilisés pour obtenir des éléments div (on ne sait pas s'il existe d'autres éléments qui ne peuvent pas être obtenus).