![]() |
|
Модераторы: Sardar, Aliance |
![]()
|
|
| Helene |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 1.2.2006 Где: Киев Репутация: нет Всего: нет |
Как ни странно звучит, но нужно поймать событие ошибки загрузки страницы, а именно "Page not Found".
Ситуация такова - будет расширение для FireFox, выполняющее по данному событию некоторые действия. Так вот, как раз отлов данного события и саму его функцию хотелось бы написать на JavaScript. Подскажите, пожалуйста, методы решения данной задачи. |
|||
|
||||
| Innuendo |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 745 Регистрация: 24.12.2005 Где: Молдова Репутация: 2 Всего: 6 |
Page not found- это то есть он страницу просто не грузит.. а если он её не грузит, то как он прочитает код из неё самой?
-------------------- =) |
|||
|
||||
| Helene |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 1.2.2006 Где: Киев Репутация: нет Всего: нет |
говорю же, это скрипт в расширении. а оно работает даже если мы вообще ничего не грузим ;) |
|||
|
||||
| 12345c |
|
|||
![]() Круглый ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 2018 Регистрация: 26.12.2005 Где: наша не пропадала ? Репутация: 57 Всего: 101 |
Попробуйте try-catch при попытке прочитать фрейм с незагруженной страницей. Я ещё делал так, что блокировал onerror, потом читал фрейм. Если страница загрузилась, она должна что-то вернуть, например, document.body . Если нет, то страница будет чужая, вернёт ошибку доступа к фрейму, поэтому проверка даст null.
Да, ещё можно более цивилизованно читать у окна readyState и пользоваться onreadystatechange . Это сообщение отредактировал(а) 12345c - 15.2.2006, 21:14 -------------------- Google Code Playground - онлайн-отладка своих примеров HTML+JS без регистрации, с сохранением по URL, без кириллицы. Go |
|||
|
||||
| Helene |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 1.2.2006 Где: Киев Репутация: нет Всего: нет |
есть некоторые проблемы: - постановка задачи исключает использование фреймов - я пробовала реагировать на различные события - onerror, onerrorupdate, onreadystatechange, но, к сожалению, все они не дали должного результата. лучше всего, конечно, подходит onerror, но и с ним есть нестыковки. во-первых, мне нужно скрывать родное окошко FF об ошибке. во-вторых, событие onerror происходит лишь при первой ошибочной загрузке страницы. т.е. я пытаюсь зайти на http://gdgfdjhjk.com, получаю сообщение об ошибке, потом ловлю событие onerror. опять пытаюсь зайти на http://gdgfdjhjk.com, получаю стандартное сообщение, а onerror для этого адреса больше не ловится. итак, у меня конкретизировались вопросы: 1. реакцией на какое событие является родное для браузера сообщение об ошибке? 2. каким образом я могу управлять этими сообщениями - перехватить их, запретить вообще или же выдать в определенный момент. |
|||
|
||||
| 12345c |
|
|||
![]() Круглый ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 2018 Регистрация: 26.12.2005 Где: наша не пропадала ? Репутация: 57 Всего: 101 |
1. Скорее, событие есть реакция на сообщение об ошибке и на многие другие ошибки.
2. На ошибки исполнения вы можете ответить и отменить стандартное, но ошибка протокола обмена - надо пробовать. А вы пробовали из нового окна ловить событие о незагрузке? Потому что других стандартных вариантов почти нет. Есть ещё вариант, но для FF не работает с чужими сайтами - XMLHttpRequest. Пример найдёте, там как раз опрашивается readyState . Но использовать полученную страницу сможете только или если она валидная XHTML, или прочитаете текст без тегов, или используете кеш браузера, перезагрузив страницу в окно после того, как убедились, что она существует. -------------------- Google Code Playground - онлайн-отладка своих примеров HTML+JS без регистрации, с сохранением по URL, без кириллицы. Go |
|||
|
||||
| Helene |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 1.2.2006 Где: Киев Репутация: нет Всего: нет |
вот в том-то и проблема, что меня интересует отслеживание так называемых ошибок броузера, а не ошибок кода. JavaScript вообще позволяет анализировать их?
|
|||
|
||||
| 12345c |
|
|||
![]() Круглый ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 2018 Регистрация: 26.12.2005 Где: наша не пропадала ? Репутация: 57 Всего: 101 |
Точнее, ошибки протокола обмена.
readyState - это как раз он. Там при случае можно встретить 404, 0, 200 - коды завершения загрузки. Читайте о XMLHttpRequest, хотя бы http://www.webmascon.com/topics/technologies/13a.asp на русском, середину статьи. -------------------- Google Code Playground - онлайн-отладка своих примеров HTML+JS без регистрации, с сохранением по URL, без кириллицы. Go |
|||
|
||||
| Helene |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 1.2.2006 Где: Киев Репутация: нет Всего: нет |
спасибо, хорошая идея.
а можно ли каким-либо образом установить связь переменной с window.location? т.е. изменяется location, автоматически изменяется и переменная. или есть событие, по которому мы можем присваивать значение? если да, тогда схема действий может быть таковой: - создаем объект XMLHttpRequest - привязываем его к адресной строке - заставляем каждый запрос проходить проверку, там же и ошибки обрабатываем но не будет ли при такой схеме ФФ все равно выводить свои сообщения об ошибках? можно ли их "не пустить"? |
|||
|
||||
| 12345c |
|
|||
![]() Круглый ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 2018 Регистрация: 26.12.2005 Где: наша не пропадала ? Репутация: 57 Всего: 101 |
Нет, так нельзя, см.методы этого объекта, среди них не найдёте подобного. http://xulplanet.com/references/objref/XML...tml#method_send . Идея в том, что вызываете второй раз тот же адрес, а он берётся из кеша. И -
-------------------- Google Code Playground - онлайн-отладка своих примеров HTML+JS без регистрации, с сохранением по URL, без кириллицы. Go |
|||
|
||||
| Helene |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 1.2.2006 Где: Киев Репутация: нет Всего: нет |
ну что ж, в конце концов я своего добилась с помощью такой конструкции. теперь у меня есть возможность контроллировать загрузки страничек.
|
|||
|
||||
| 12345c |
|
|||
![]() Круглый ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 2018 Регистрация: 26.12.2005 Где: наша не пропадала ? Репутация: 57 Всего: 101 |
Спасибо, полезный будет код, нетривиальная задача.
Но, судя по тексту, он только для FF (Gecko) и не работает с чужими сайтами? -------------------- Google Code Playground - онлайн-отладка своих примеров HTML+JS без регистрации, с сохранением по URL, без кириллицы. Go |
|||
|
||||
| Helene |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 1.2.2006 Где: Киев Репутация: нет Всего: нет |
это расширение для FireFox, действующее по схеме:
1. пользователь пытается открыть страничку 2. загрузка останавливается 3. проверяется корректность адреса 4. в зависимости от результата проверки выполняются различные действия. так что ему не важно, с какими страничками работать. в нем все еще есть некоторые проблемы, вызванные с отсутствием события "начало загрузки страницы", так как приходится, роясь в коде FF, находить все места, из которых эта загрузка страницы возможна вообще. хотелось бы сделать это более элегантно. p.s. кстати, есть еще одна интересная задача - перехват запуска файлов и их запуск определенным приложением, и все это под FreeBSD (хотя, по-моему, без разницы). |
|||
|
||||
![]()
|
| Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | JavaScript: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |