JavaScript: объект не поддерживает это свойство или метод - PullRequest
0 голосов
/ 08 января 2011

На моей странице jsp в теге указан следующий код:

<script type="text/javascript"
    src="<%=request.getContextPath()%>/static/js/common/common.js"></script>    
<script type="text/javascript">

    // Function for Suppressing the JS Error
    function silentErrorHandler() {return true;}
    window.onerror=silentErrorHandler;

</script>

Если после этого на странице jsp будет выполняться JavaScript, то я думаю, что silentErrorHandler () не будет иметь никакого эффекта. т.е. ошибка все равно будет отображаться на странице. Это правильно? Потому что ошибка показывает, и я не уверен, почему. Вторая часть вопроса такова:
Ошибка

Webpage error details

User Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; AskTbFXTV5/5.9.1.14019)
Timestamp: Fri, 7 Jan 2011 21:26:23 UTC


Message: Object doesn't support this property or method
Line: 613
Char: 1
Code: 0
URI: http://localhost:9080/Claris/static/js/common/common.js

И, наконец, строка 613 сообщает

document.captureEvents(Event.MOUSEUP);

Ошибка в IE8. Отлично работает на Mozilla и IE7. Любые предложения будут очень полезны

Ответы [ 2 ]

3 голосов
/ 08 января 2011

как это работает в IE7?

captureEvents() - неприятный, ненадежный интерфейс событий эпохи Netscape 4, который всегда был сомнительным и не должен использоваться ни для чего. В новых версиях IE и Firefox отсутствует его поддержка. Похоже, ваши скрипты нуждаются в серьезном обновлении.

Добавление приемника ошибок - тоже довольно плохая идея. Учет ваших ошибок под ковром делает вашу работу по поиску ошибок более сложной и не влияет на обычных пользователей (так как у них будут настройки браузера по умолчанию не открывать отчет об ошибках JS).

Так что в более новой IE8 мы можем сделать document.onmouseup = someFunction; без необходимости document.captureEvents(Event.MOUSEUP); Исправить?

Да, но он использует «пузыриться», а не «захватывать». В этом случае события по-прежнему будут запускаться для дочерних элементов и будут «пузыриться» через каждого из предков, пока не попадут в документ.

Идея «захвата» заключается в том, что элемент-предок (документ) может вообще не допустить получения потомками каких-либо уведомлений о событии. Захват событий не часто требуется на практике и является проблемой, поскольку в разных браузерах это делается по-разному.

IE использует метод setCapture(). Другие современные браузеры используют модель событий W3C DOM, передавая true в качестве третьего аргумента addEventListener() (это не работает с моделью событий DOM 0 при назначении функции onclick и др.). captureEvents() было так, как это было сделано в древнем Netscape. Другие старые или нишевые браузеры вообще не имеют возможности захвата событий.

В целом: лучше избегать захвата событий. Проверьте, действительно ли скрипт требует этого. Возможно, нет: если это скрипт, предназначенный для запуска в Netscape 4 (retch), он мог бы использовать captureEvents(), даже если он не нуждался в захвате, потому что были некоторые сломанные части модели событий Netscape, которые не работали прямо с пузырьками.

1 голос
/ 08 января 2011

Ваша ошибка указывает на строку внутри файла скрипта, которая загружается перед установкой подавления ошибки.

Если вы поставите его перед тем, как включить файл common.js, он должен работать.

Тем не менее, вы должны действительно попытаться найти ошибку и исправить ее ... или обернуть ее в try / catch, если исключение не действительно проблема.

например. в вашем случае (при использовании IE) вы получите ошибку, потому что document в IE не имеет document.captureEvents свойство / метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...