1. Проблема поиска элемента
1. Document.all [имя]
(1) Существующая проблема: Firefox не поддерживает документ. Все [имя]
(2) Решение: используйте GetElementsByName (имя), GetElementById (ID) и т. Д., Чтобы заменить его.
2. Проблема с объектом сбора
(1) Существующая проблема: т.е. может использовать () при использовании многих объектов класса сбора, но только [] может использоваться в Firefox.
Например: в т.е. Document.forms («FormName») может использоваться для возврата формы с названием «FormName», но он не работает в Firefox.
(2) Решение: Используйте [] В приведенном выше примере вы можете изменить на Document.forms ["formName"]
3. Идентификатор элемента HTML виден в JavaScript
(1) Существующая проблема: идентификатор в элементе HTML в IE может использоваться непосредственно в качестве имени переменной подчиненного объекта документа. Недоступно в Firefox.
(2) Решение: Используйте GetElementById ("idName") вместо IdName в качестве переменной объекта.
4. eval (idname) получает объект
(1) Существующая проблема: в т.е. с использованием eval (idname) может получить HTML -объекты с помощью iDname, но не может использоваться в Firefox.
(2) Решение: используйте GetElementById (iDname) вместо eval (idName).
5. Имя переменной такое же, как и идентификатор объекта HTML
(1) Существующая проблема: в Firefox, поскольку идентификатор объекта не является именем объекта HTML, вы можете использовать одно и то же имя переменной, что и идентификатор объекта HTML, который не может быть использован в IE.
(2) Решение: При объявлении переменных добавьте var, чтобы избежать двусмысленности, чтобы он также мог работать нормально в IE. Кроме того, лучше не принимать то же имя переменной, что и идентификатор объекта HTML, чтобы уменьшить ошибки.
Примечание: 3, 4 и 5 принадлежат к одной и той же категории проблем.
6. кадр
(1) Существующая проблема: в т.е. вы можете использовать window.top.frameid и window.top.frameName, чтобы получить окно, представленное кадром. Только window.top.frameName может использоваться в Firefox.
(2) Решение: Установите идентификатор и имя кадра на то же самое, и используйте window.top.frameName для доступа к кадре.
2. Операция DOM
1. Установите текстовое содержание элемента.
(1) Существующая проблема: т.е. использует внутренний текст, в то время как Firefox использует TextContent для установки текстового содержимого элемента.
(2) Решение: если текстовое содержимое не содержит специальных символов, таких как «<» и «>», вы можете использовать Innerhtml. В противном случае вы можете использовать:
var Child = elem.firstchild; if (ребенок! = null) elem.removechild (ребенок); elem.appendchild (document.createtextnode (content));
2. ParentElement, Parent.Children
(1) Существующая задача: т.е. может использовать родительский рост для получения родительских узлов, а родители. Киночки могут получить все дочерние узлы узлов. Firefox не поддерживает его.
(2) Решение: используйте ParentNode и Parent.ChildNodes.
3. Объяснение детей.
(1) Существующая проблема: объяснения детей в IE и Firefox разные. IE не будет включать пустые текстовые узлы, в то время как Firefox будет включать.
(2) Решение: Используйте детей, чтобы фильтровать текстовые узлы следующим образом:
var Children = elem.childnodes; for (i = 0; i <kinds.length; i ++) {if (kids [i] .nodeType! = 3) {// фильтр текстовых узлов // ...}}4. Объяснение Document.GetElementsByName.
(1) Существующая проблема: getElementsbyname в IE будет проверять только элементы <pint> и <img>, в то время как все элементы будут проверены под Firefox.
(2) Решение: не используйте getElementsbyname для проверки элементов, отличных от <pint> и <img>. Если вы хотите получить один элемент, попробуйте использовать GetElementByID.
5. Объяснение Document.GetElementById.
(1) Существующая проблема: GetElementByID в IE не только проверяет атрибут ID, но и проверяет атрибут имени. Этот элемент также будет возвращен, когда атрибут имени соответствует параметру. В Firefox будет проверен только атрибут ID.
(2) Решение: постарайтесь сохранить идентификатор и назвать одинаковым, и не делайте атрибут имени одного элемента и атрибут идентификатора другого элемента одинаковым.
Iii. События
1. Event.x и Event.y Проблемы
(1) Существующая проблема: в т.е. объект события имеет атрибуты x, y, но не в Firefox.
(2) Решение: в Firefox эквивалент Event.x event.pagex. Можно использовать:
mx = event.x? Event.x: Event.pagex;
2. window.event
(1) Существующая проблема: использование Window.Event не может работать на Firefox
(2) Решение:
Оригинальный код (может быть запущен в IE):
<input type = "кнопка" name = "somebutton" value = "отправить" onclick = "javascript: gotoSubmit ()"/> ... <script language = "javascript"> function gotoSubmit () {... alert (window.event); // Использовать window.event ...} </script>Новый код (может работать в IE и Firefox):
<input type = "кнопка" name = "somebutton" value = "spect" onclick = "javascript: gotoSubmit (event)"/> ... <script language = "javascript"> function gotosubmit (evt) {evt = evt? evt: (window.event? window.event: null); ... оповещение (EVT); // Использовать evt ...} </script>3. AttactEvent и AddEventListener
(1) Существующая проблема: т.е. использует AttachEvent для добавления событий, а Firefox использует addeventListener.
(2) Решение: следующим образом обратите внимание на разницу в параметрах события, один - щелчок, а другой - OnClick.
if (document.attachevent) document.attachevent ("click", clickhandler, false);
else document.addeventlistener ("onclick", clickhandler);
4. Грамматика
1. Конст
(1) Существующая проблема: ключевое слово Const не может быть использовано в IE. Например, const constvar = 32; В т.е. это синтаксическая ошибка.
(2) Решение: не используйте const, используйте var вместо этого.
2. Дополнительные запятые
(1) Существующая проблема: буквальные константы объекта в Firefox содержат много запятых, которые не допускаются в IE. Следующее заявление является незаконным в т.е.
var obj = {'key': 'aaa',}
(2) Решение: удалить избыточные запятые.
5. XML
1. Создать Xmlhttprequest
(1) Существующие проблемы: Firefox использует Xmlhttprequest, IE использует ActiveXObject.
(2) Решение:
if (window.xmlhttprequest) {req = new xmlhttprequest (); } else if (window.activexobject) {req = new activexObject ("microsoft.xmlhttp"); }2. Создайте DOM
(1) Существующая проблема: Firefox и IE создают DOMS по -разному.
(2) Решение:
function createxmldom () {var oxmldom; if (window.activexobject) {// ie oxmldom = new ActiveXobject ("microsoft.xmldom"); } else {// firefox oxmldom = document.implementation.createdocument ("", "", null); }}3. Загрузите XML
(1) Существующая проблема: если вы хотите загрузить внешние файлы, т.е. и Firefox, вы можете использовать ее:
oxmldom.async = false; // это необходимо в Firefox
oxmldom.load ("test.xml");
Тем не менее, они загружают строки XML по -разному. Вы можете напрямую использовать oxmldom.loadxml ("<root> <child/> </root>") в IE, в то время как Firefox необходимо использовать Domparser:
var oparser = new Domparser ();
var oxmldom = oparser.parsefromString ("<root/>", "text/xml");
(2) Решение: лучшим методом является добавление метода LoadXML к XMLDOM, генерируемому Firefox:
if (isfirefox) {// требует обнаружения браузера
Document.prototype.loadxml = function (sxml) {var oparser = new domparser (); var oxmldom = oparser.parsefromString (sxml, "text/xml"); while (this.firstchild) this.removechild (this.firstchild); for (var i = 0; i <oxmldom.childnodes.length; i ++) {var onwnode = this.importnode (oxmldom.childnodes [i], true); this.AppendChild (OneWnode); }}}Таким образом, метод LoadXML может быть вызван в IE и Firefox.
4. Поддержка XPath
(1) Существующие проблемы: в т.е. вы можете напрямую использовать SelectNodes Xmldom для выбора узлов на основе представления XPath. Firefox более сложный и требует использования Xpathevaluator.
Т.е.:
var lstnodes = oxmldom.documentelement.selectnodes ("Сотрудник/Имя"); for (var i = 0; i <lstnodes.length; i ++) {alert (lstnodes [i] .firstchild.nodevalue); }Firefox:
var oevaluator = new xpathevaluator (); var oresult = oevaluator.evaluate ("Сотрудник/Имя", oxmldom.documentelement, null, xpathresult.ordered_node_iterator_type, null); var oelement = oresult.iteratenext (); while (oelement) {alert (oelement.firstchild.nodevalue); oelement = oresult.iteratenext (); }(2) Решение: лучший метод добавления метода SelectNodes в элемент Firefox.
if (isfirefox) {// браузер должен обнаружить element.prototype.selectnodes = function (sxpath) {var oevaluator = new xpathevaluator (); var oresult = oevaluator.evaluate (sxpath, this, null, xpathresult.ordered_node_iterator_type, null); var anodes = new Array (); if (oresult! = null) {var oelement = oresult.iteratenext (); while (oelement) {anodes.push (oelement); oelement = oresult.iteratenext (); }} вернуть аноды; }}Таким образом, метод SelectNodes может быть вызван как в IE, так и в Firefox.
5. Поддержка XSLT
(1) Существующая проблема: в т.е. вы можете использовать метод TransferNode XMLDOM для преобразования его в HTML, в то время как Firefox необходимо использовать XSLTProcessor.
Т.е.:
oxmldom.load ("employtee.xml"); oxsldom.load ("employtee.xslt"); var sresult = oxmldom.transformnode (oxsldom);Firefox:
var oprocessor = new XsltProcessor (); Oprocessor.importStylesheet (Oxsldom); var Oresultdom = Oprocessor.TransformTodocument (oxmLdom); var oserializer = new XmlSerializer (); var sxml = oserializer.serializetostring (oresultdom, "text/xml"); оповещение (SXML);
(2) Решение: Лучший способ добавить метод TransferNode к узлу Firefox.
if (isfirefox) {// браузер должен обнаружить node.prototype.transformnode = function (oxsldom) {var oprocessor = new xsltprocessor (); Oprocessor.importStylesheet (Oxsldom); var Oresultdom = Oprocessor.TransformTodocument (oxmLdom); var oserializer = new XmlSerializer (); var sxml = oserializer.serializetostring (oresultdom, "text/xml"); вернуть SXML; }}Таким образом, метод TransferNode может быть вызван как в IE, так и в Firefox.
Выше приведено краткое изложение метода написания JS, совместимого с браузером, я надеюсь, что он будет полезен для каждого обучения.