Я обнаружил ошибку JavaScript в разрабатываемом скрипте.Я сократил его до пары довольно лаконичных страниц, которые по-прежнему выдают ошибку:
Если вы загрузитена первой странице в Internet Explorer 8 (или, вероятно, 6 или 7), дайте ему примерно полсекунды для запуска сценария, затем нажмите ссылку "Google" внутри <iframe>
, вы должны увидеть сообщение об ошибкепоявляются:
http://skitch.com/troywarr/dui21/ie8-error
(Вам может понадобиться снять отметку Tools > Internet Options > Advanced > "Disable script debugging (Internet Explorer)"
и отметить "Display a notification about every script error"
двумя строками ниже, чтобы увидеть сообщения об ошибках.)
Запуск отладчикапоказывает красиво проницательное сообщение «Требуется объект»:
http://skitch.com/troywarr/dui26/ie8-debugging
Виновником является строка:
target = event_object.target || event_object.srcElement;
Я думаю, что это правильный код - по крайней мере, он работаетв Firefox.Мое лучшее предположение состоит в том, что существует проблема с попыткой доступа к объекту события одного кадра из другого - примерно так же, как то, почему вы не можете полагаться на instanceof
для обнаружения массивов, если они были созданы в другом окне / кадре (поискдля «контекста» на http://javascript.crockford.com/remedial.html, если это не имеет смысла).
Похоже ли это на действительную теорию?Если так, что я могу сделать, чтобы это исправить?Если это вообще возможно, мне нужно сохранить ту же общую структуру / функциональность кода:
- На странице есть ссылка
<iframe>
. - Скрипт в
<iframe>
вызывает функцию на родительской странице, которая присоединяет обработчик события к элементу в <iframe>
с указанным атрибутом id
. - Нажатие на ссылку
<iframe>
d вызывает событие, которое вызываетфункция на родительской странице, передающая объект события по умолчанию. - Функция на родительской странице определяет информацию о выбранном элементе (
<a>
) из объекта события кросс-браузерно-совместимым способом.
Я также хотел бы продолжить использование делегирования событий и сохранить все функции в родительском документе, просто вызывая их с аргументами из документа <iframe>
d.Однако, если у вас есть предложения по альтернативным подходам, я бы хотел их услышать.
Заранее благодарен за любую помощь!Пожалуйста, дайте мне знать, если вам нужно больше объяснений о моих требованиях или о том, что я пытаюсь сделать - я надеюсь, что есть просто лучший способ получить доступ или передать объект события, о котором я не знаю - "ОДа, вам просто нужно сделать это, как этот "вид решения.Я надеюсь, что это не желаемое за действительное.; -)