Эта статья суммирует и анализирует общие проблемы совместимости в JavaScript в браузерах IE и Firefox. Поделитесь этим для вашей ссылки, следующим образом:
Форма
document.formname.item ("itemname")Т.е. вы можете использовать document.formname.item ("itemname") или document.formname.elements ["elementName"]
Firefox: только document.formname.elements ["elementName"]
Решение: Использовать Document.formname.elements ["elementName"]
Объекты класса коллекции
Т.е. вы можете использовать () или [], чтобы получить объекты класса коллекции;
Firefox: используйте только [], чтобы получить объекты класса сбора.
Решение: используйте [], чтобы получить объекты класса сбора единым образом.
Пользовательские свойства
Т.е. вы можете использовать метод получения регулярных атрибутов для получения пользовательских атрибутов, или вы можете использовать getattribute () для получения пользовательских атрибутов
Firefox: Вы можете использовать только getattribute () для получения пользовательских свойств.
Решение: равномерно получить пользовательские атрибуты через getattribute ().
Приобретение элементов
Eval ("idname")Т.е. вы можете использовать eval ("idname") или getelementbyid ("idname"), чтобы получить HTML -объект с idname;
Firefox: Вы можете использовать только GetElementById ("idName"), чтобы получить объекты HTML с iDname с iDname.
Решение: используйте GetElementById ("idName"), чтобы получить объект HTML с ID как idName.
Дублировать именование
Проблема с тем же именем переменной, что и определенный идентификатор объекта HTML
IE: идентификатор объекта HTML может использоваться непосредственно в качестве имени переменной подчиненного объекта документа, но его нельзя использовать в Firefox;
Firefox: Вы можете использовать то же имя переменной, что и идентификатор объекта HTML, но вы не можете в IE.
Обходной путь: используйте Document.getElementById ("iDname") вместо Document.IdName. Лучше всего не принимать имена переменных с тем же идентификатором объекта HTML, чтобы уменьшить ошибки; При объявлении переменных добавьте var, чтобы избежать двусмысленности.
констант
IE: Используйте только ключевое слово var для определения переменных.
Firefox: Вы можете использовать ключевое слово Const или ключевое слово var для определения переменных.
Решение: используйте ключевое слово var, чтобы равномерно определить переменные.
input.type
input.type Attribute Проблема
Т.е. атрибут input.type только для чтения.
Firefox: атрибут input.type читается и записывает.
Window.event
Window.Event может работать только под IE, а не в Firefox, потому что событие Firefox может использоваться только на сцене, где происходит событие.
Firefox: событие должно быть добавлено из источника для передачи параметров. IE игнорирует этот параметр и использует window.event для чтения события.
Решение:
<script language = "javascript"> function fun (e) {e = e? E: (window.event? Window.event: Null); } </script>Event.x и Event.y
Описание: под т.е. vese объект имеет атрибуты x и y, но у него нет атрибутов Pagex и Pagey; Под Firefox у Evel Cobve есть атрибуты Pagex и Pagey, но не имеет атрибутов X и Y.
Решение: Используйте MX (MX = Event.x? Event.x: Event.Pagex;) вместо Event.x под IE или Event.Pagex под Firefox.
Event.srcelement
IE: объект события имеет свойство Srcelement, но не имеет целевого свойства;
Firefox: даже объект имеет целевое свойство, но нет свойства Srcelement.
Решение: используйте obj (obj = event.srcelement? Event.srcelement: event.target;) вместо события. Пожалуйста, также обратите внимание на вопросы совместимости события.
window.location.href
Т.е. или Firefox2.0.x: вы можете использовать window.location или window.location.href;
Firefox1.5.x: только Window.Location используется
Обходной путь: используйте window.location вместо window.location.href.
Модальные и немодальные окна
Т.е.: Модальные и немодальные окна могут быть открыты через ShowModaldialog и ShowmodelessDialog
Firefox: Нет!
Решение: используйте window.open (pageurl, имя, параметры), чтобы открыть новое окно.
Если вам нужно перенести параметры в окне дочернего окна обратно в родительское окно, вы можете использовать Window.Pener в окне ребенка, чтобы получить доступ к родительскому окну. Например: var parwin = window.opener; parwin.document.getElementById ("aqing"). Value = "aqing";
рамка
Следующий кадр - это пример:
<frame src = "xxx.html" id = "frameid" name = "frameName" />
1. Доступ к объекту кадра:
[Возвращаемый объект в IE - это объект, а конкретный тип будет отображаться в FF, например: окно объекта]
Т.е. используйте window.frameid или window.frameName, чтобы получить доступ к этому объекту кадра. Frameid и FrameName могут иметь то же имя.
Firefox: только window.frameName можно использовать для доступа к этому объекту кадра.
Как в IE, так и в Firefox вы можете использовать window.document.getElementById ("frameID") для доступа к этому объекту кадра.
2. Переключить содержимое кадра:
Как в IE, так и в Firefox вы можете использовать window.document.getElementById ("testFrame"). Src = "xxx.html" или window.framename.location = "xxx.html", чтобы переключить содержимое кадра.
Если вам нужно передать параметры в кадре обратно в родительское окно (обратите внимание, что это не открытие, а родительский кадр), вы можете использовать родителя в кадре для доступа к родительскому окну. Например: parent.document.form1.filename.value = "a";
Тело
IE: тело должно существовать после того, как тег тела полностью прочитал браузер.
Firefox: тело существует до того, как бирга полностью прочитана браузером.
Метод делегирования события
Т.е.: копия кода выглядит следующим образом: document.body.onload = inject; // функция inject () была реализована до этого
Firefox: Кода -копия выглядит следующим образом: document.body.onload = inject ();
Родительский элемент
Разница между Firefox и IE родительским элементом (ParentElement)
Т.е. obj.parentelement
Firefox: obj.parentnode
Решение: потому что как Firefox, так и IE поддерживают DOM, с использованием obj.parentnode является хорошим выбором.
Курсор мыши
Курсор: рука против курсора: указатель
Firefox: рука не поддерживается
Т.е.: указатель поддержки
Решение: используйте указатель равномерно
Контент текст
Внутренний текст работает нормально в т.е. Тем не менее, внутренний текст не работает в Firefox, TextContent требуется.
Решение:
if (navigator.appname.indexof ("explorer")> -1) {document.getElementById ('element'). innerText = "my Text"; } else {document.getElementById ('element'). Textc; }Операция на таблице
Т.е. Firefox и другие браузеры имеют разные операции на таблице. IE не разрешается назначать значения Innerhtml для таблицы и Tr. При использовании JS для добавления TR метод AppendChild не полезен.
Решение:
// Добавить пустую линию в таблицу: var row = otable.insertrow (-1); var cell = document.createElement ("td"); cell.innerhtml = ""; cell.classname = "a"; row.appendchild (cell);Сбор опционов
Работа сбора параметров на выборе
В дополнение к [], SelectName.options.item () также возможно. Кроме того, selectName.options.length, selectName.options.add/remove может использоваться в обоих браузерах.
*Обратите внимание, что элемент назначен после добавления, иначе он потерпит неудачу.
Xmlhttp
if (window.xmlhttprequest) {xmlhttp = new xmlhttprequest (); } else if (window.activexobject) {// код для IE xmlhttp = new ActiveXObject ("microsoft.xmlhttp"); } if (xmlhttp) {xmlhttp.onreadystatechange = xmlhttpchange; xmlhttp.open ("Get", url, true); xmlhttp.send (); }For more information about JavaScript related content, please check out the topics of this site: "Summary of JavaScript Errors and Debugging Skills", "Summary of JavaScript Mathematical Operation Usage", "Summary of JSON Operation Skills in JavaScript", "Summary of JavaScript Switching Special Effects and Skills", "Summary of JavaScript Search Algorithm Skills", "Summary of JavaScript Animation Special Effects and Skills", «Сводка структур данных JavaScript и навыков алгоритма» и «Сводка алгоритма и навыков обхода JavaScript» »
Я надеюсь, что эта статья будет полезна для каждого программирования JavaScript.