2012-02-15 4 views
4

Вот орех, который я просто не могу взломать. Рассмотрим следующий HTML тело:Почему слушатель onclick дает разные результаты?

<body onload="console.debug(document.documentElement);"> 
    <a href="#" onclick="console.debug(document.documentElement);">Click me</a> 
</body> 

Выход первого оператора отладки, а выход второго, срабатывающая при нажатии на ссылку, отличающуюся в консоли инспектора на Safari. После нажатия на ссылку, два выхода выглядеть следующим образом:

> HTMLHtmlElement 
> <html>...</html> 

Оба расширяемые, но первый, кажется более как надлежащий DOM элемент со всеми его гайками и болтами (прототипом, слушателями событий, ребенком и родительскими отношениями , и т. д.), а второй отображает только элемент и его дочерние элементы в виде HTML.

Нет никакой разницы между выходом, указанным в консоли Firebug в Firefox, где каждый вывод связан только с инспектором HTML.

+3

Ну, очевидно, первый скрипт запускается встроенным, прежде чем документ будет полностью проанализирован. Возможно, HTMLHtmlElement является объектом-заполнителем, который использует Safari до того, как он завершил построение DOM? –

+0

Ошибка (если она одна) также происходит в Chrome, но исправляет себя при повторном открытии консоли. – pimvdb

+0

[Chrome новейший разработчик]. На самом деле, если вы обновляете страницу с этим, иногда вы будете получать HTMLHtmlElement в другое время, когда получите разметку. –

ответ

0

Возможно, это ошибка в сафари, так как Firefox и IE9 дают одинаковый результат.

Если это действительно ошибки вы можете сообщить об ошибке: https://developer.apple.com/bugreporter/

Или это разница в двигателе.

+0

Если это также происходит в Chrome, это, вероятно, «ошибка» в Webkit. Я сомневаюсь, что я бы назвал это ошибкой, но это, вероятно, всего лишь деталь реализации своего парсера. –

Смежные вопросы