Далее вместо Internet Explorer используется IE, а вместо Mozzila Firefox — MF.
1. Проблема document.form.item
(1)Существующие проблемы:
В существующем коде есть много операторов, таких как document.formName.item("itemName"), которые нельзя запустить под MF.
(2)Решение:
Вместо этого используйте document.formName.elements["elementName"]
(3)Другие
См. 2
2. Проблемы с объектами коллекции.
(1)Существующие проблемы:
Многие объекты класса коллекции в существующем коде используют() при доступе к ним, IE может это принять, а MF — нет.
(2)Решение:
Вместо этого используйте [] для подписки. Например: document.forms("formName") заменяется на document.forms["formName"].
Другой пример: document.getElementsByName("inputName")(1) заменяется на document.getElementsByName("inputName")[1]
(3) Другие
3. window.event
(1)Существующие проблемы:
Не работает на MF с использованием window.event
(2)Решение:
Событие MF можно использовать только на месте возникновения события, и эту проблему пока решить невозможно. Это можно изменить следующим образом:
Исходный код (может работать в IE):
<input type="button" name="someButton" value="Submit" onclick="javascript:gotoSubmit()"/>
...
<script Language="JavaScript">
функция gotoSubmit() {
...
alert(window.event); // используем window.event;
...
}
</script>
Новый код (может работать в IE и MF):
<input type="button" name="someButton" value="Submit" onclick="javascript:gotoSubmit(event)"/>
...
<script Language="JavaScript">
функция gotoSubmit(evt) {
evt = evt? evt: (window.event? window.event: null);
...
предупреждение(евт); // используем эвт
...
}
</скрипт>
Кроме того, если первая строка нового кода не изменится и будет такой же, как и старый код (то есть вызов gotoSubmit не передает параметры), он все равно будет работать только в IE, но никакой ошибки не произойдет. Таким образом, часть tpl этого решения по-прежнему совместима со старым кодом.
4. Проблема использования идентификатора HTML-объекта в качестве имени объекта.
(1)Существующие проблемы
В IE идентификатор объекта HTML можно использовать непосредственно как имя переменной подчиненного объекта документа. В МФ это невозможно.
(2)Решение
Используйте getElementById("idName") вместо idName в качестве объектной переменной.
5. Проблема с получением объекта по строке idName.
(1)Существующие проблемы
В IE вы можете использовать eval(idName) для получения объекта HTML с идентификатором idName, но не в MF.
(2)Решение
Используйте getElementById(idName) вместо eval(idName).
6. Проблема в том, что имя переменной совпадает с идентификатором HTML-объекта.
(1)Существующие проблемы
В MF, поскольку идентификатор объекта не используется в качестве имени объекта HTML, вы можете использовать то же имя переменной, что и идентификатор объекта HTML, но не в IE.
(2)Решение
При объявлении переменных всегда добавляйте var, чтобы избежать двусмысленности и обеспечить нормальную работу в IE.
Кроме того, во избежание ошибок лучше не использовать то же имя переменной, что и идентификатор объекта HTML.
(3)Другие
См. вопрос 4
7. Проблемы с Event.x и event.y.
(1)Существующие проблемы
В IE объект события имеет атрибуты x, y, но не в MF.
(2)Решение
В MF эквивалентом event.x является event.pageX. Но event.pageX недоступен в IE.
Поэтому вместо event.x используется event.clientX. Эта переменная также существует в IE.
Между event.clientX и event.pageX есть небольшие различия (когда вся страница имеет полосы прокрутки), но в большинстве случаев они эквивалентны.
Если вы хотите, чтобы все было точно так же, вы можете решить немного больше проблем:
mX = event.x ? event.x : event.pageX;
Затем используйте mX вместо event.x
(3)Другие
event.layerX существует как в IE, так и в MF. Различное ли значение еще не проверено.
8. О рамке
(1)Существующие проблемы
В IE вы можете использовать window.testFrame для получения кадра, но не в mf.
(2)Решение
Основное различие между mf и ie в использовании фрейма заключается в следующем:
Если в теге кадра прописаны следующие атрибуты:
<frame src="xx.htm" id="frameId" name="frameName" />
Тогда ie может получить доступ к объекту окна, соответствующему этому фрейму, через идентификатор или имя, в то время как mf может получить доступ к объекту окна, соответствующему этому фрейму, только через имя. Например, если указанный выше тег фрейма записан в htm внутри верхнего окна, тогда. к нему можно получить доступ вот так
т.е.: window.top.frameId или window.top.frameName для доступа к этому объекту окна.
mf: доступ к этому объекту окна возможен только через window.top.frameName.
Кроме того, window.top.document.getElementById("frameId") можно использовать как в mf, так и в ie для доступа к тегу фрейма и window.top.document. . getElementById("testFrame").src = 'xx.htm' для переключения содержимого фрейма, вы также можете использовать window.top.frameName.location = 'xx.htm' для переключения содержимого фрейма. описание фрейма и окна см. в статье bbs «окно и фрейм» и тестах в каталоге /test/js/test_frame/.
----adun 2004.12.09 Модификация
9. В mf определенные вами атрибуты необходимо получать методом getAttribute()
10. В mf нет родительского элемента parement.children, но используется
родительскийузелродительскийузел.childNodes
Значение нижнего индекса дочерних узлов различается в IE и MF. MF использует спецификацию DOM, и в дочерние узлы будут вставлены пустые текстовые узлы.
Как правило, этой проблемы можно избежать с помощью node.getElementsByTagName().
Если узел отсутствует в html, IE и MF интерпретируют родительский узел по-разному, например
<форма>
<таблица>
<вход/>
</таблица>
</форма>
Значение input.parentNode в MF — это форма, а значение input.parentNode в IE — пустой узел.
Для узлов в MF не существует метода removeNode. Необходимо использовать следующий метод node.parentNode.removeChild(node)
11. .const Проблема
(1)Существующие проблемы:
Ключевое слово const нельзя использовать в IE. Например, const constVar = 32. Это синтаксическая ошибка в IE.
(2)Решение:
Не используйте const, вместо этого используйте var.
12. объект тела
Тело MF существует до того, как тег body полностью прочитан браузером, тогда как IE должен существовать после того, как тело полностью прочитано.
13. Кодировка URL.
В js, если вы пишете URL, просто напишите «не писать». Например, var url = 'xx.jsp?objectName=xx&objectEvent=xxx';
frm.action=url, то очень вероятно, что url не будет нормально отображаться и параметры не корректно передаются на сервер. В общем, сервер сообщит об ошибке, что параметр не найден. Конечно, исключение. это если он находится в tpl, потому что tpl соответствует спецификации xml, а требование & записывается как &
Как правило, MF не может распознать & в js.
14. Проблема с именем узла и именем тега
(1)Существующие проблемы:
В MF все узлы имеют значение nodeName, но textNode не имеет значения tagName. В IE использование nodeName выглядит как
Есть проблема (конкретную ситуацию не проверял, но мой IE несколько раз умирал).
(2)Решение:
Используйте tagName, но он должен определить, пуст ли он.
15. Атрибуты элемента
Атрибут input.type доступен только для чтения в IE, но может быть изменен в MF.
16. Проблемы с document.getElementsByName() и document.all[name]
(1)Существующие проблемы:
В IE методы getElementsByName() и document.all[name] нельзя использовать для получения элементов div (неизвестно, есть ли другие элементы, которые невозможно получить).