Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> поймать событие ошибки загрузки страницы 
V
    Опции темы
Helene
Дата 15.2.2006, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 1.2.2006
Где: Киев

Репутация: нет
Всего: нет



Как ни странно звучит, но нужно поймать событие ошибки загрузки страницы, а именно "Page not Found".

Ситуация такова - будет расширение для FireFox, выполняющее по данному событию некоторые действия. Так вот, как раз отлов данного события и саму его функцию хотелось бы написать на JavaScript.

Подскажите, пожалуйста, методы решения данной задачи.
PM ICQ   Вверх
Innuendo
Дата 15.2.2006, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 24.12.2005
Где: Молдова

Репутация: 2
Всего: 6



Page not found- это то есть он страницу просто не грузит.. а если он её не грузит, то как он прочитает код из неё самой?


--------------------
=)
PM MAIL ICQ Jabber   Вверх
Helene
Дата 15.2.2006, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 1.2.2006
Где: Киев

Репутация: нет
Всего: нет



Цитата(Innuendo @ 15.2.2006, 20:31)
Page not found- это то есть он страницу просто не грузит.. а если он её не грузит, то как он прочитает код из неё самой?

говорю же, это скрипт в расширении. а оно работает даже если мы вообще ничего не грузим ;)
PM ICQ   Вверх
12345c
Дата 15.2.2006, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: 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
PM WWW   Вверх
Helene
Дата 16.2.2006, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 1.2.2006
Где: Киев

Репутация: нет
Всего: нет



Цитата(12345c @ 15.2.2006, 21:11)
Попробуйте try-catch при попытке прочитать фрейм с незагруженной страницей. Я ещё делал так, что блокировал onerror, потом читал фрейм. Если страница загрузилась, она должна что-то вернуть, например, document.body . Если нет, то страница будет чужая, вернёт ошибку доступа к фрейму, поэтому проверка даст null.

Да, ещё можно более цивилизованно читать у окна readyState и пользоваться onreadystatechange .

есть некоторые проблемы:

- постановка задачи исключает использование фреймов

- я пробовала реагировать на различные события - onerror, onerrorupdate, onreadystatechange, но, к сожалению, все они не дали должного результата. лучше всего, конечно, подходит onerror, но и с ним есть нестыковки. во-первых, мне нужно скрывать родное окошко FF об ошибке. во-вторых, событие onerror происходит лишь при первой ошибочной загрузке страницы.
т.е. я пытаюсь зайти на http://gdgfdjhjk.com, получаю сообщение об ошибке, потом ловлю событие onerror. опять пытаюсь зайти на http://gdgfdjhjk.com, получаю стандартное сообщение, а onerror для этого адреса больше не ловится.

итак, у меня конкретизировались вопросы:
1. реакцией на какое событие является родное для браузера сообщение об ошибке?
2. каким образом я могу управлять этими сообщениями - перехватить их, запретить вообще или же выдать в определенный момент.
PM ICQ   Вверх
12345c
Дата 16.2.2006, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



1. Скорее, событие есть реакция на сообщение об ошибке и на многие другие ошибки.
2. На ошибки исполнения вы можете ответить и отменить стандартное, но ошибка протокола обмена - надо пробовать.

А вы пробовали из нового окна ловить событие о незагрузке? Потому что других стандартных вариантов почти нет.

Есть ещё вариант, но для FF не работает с чужими сайтами - XMLHttpRequest. Пример найдёте, там как раз опрашивается readyState . Но использовать полученную страницу сможете только или если она валидная XHTML, или прочитаете текст без тегов, или используете кеш браузера, перезагрузив страницу в окно после того, как убедились, что она существует.



--------------------
Google Code Playground - онлайн-отладка своих примеров HTML+JS без регистрации, с сохранением по URL, без кириллицы. Go
PM WWW   Вверх
Helene
Дата 16.2.2006, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 1.2.2006
Где: Киев

Репутация: нет
Всего: нет



вот в том-то и проблема, что меня интересует отслеживание так называемых ошибок броузера, а не ошибок кода. JavaScript вообще позволяет анализировать их?
PM ICQ   Вверх
12345c
Дата 16.2.2006, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: 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
PM WWW   Вверх
Helene
Дата 16.2.2006, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 1.2.2006
Где: Киев

Репутация: нет
Всего: нет



спасибо, хорошая идея.

а можно ли каким-либо образом установить связь переменной с window.location? т.е. изменяется location, автоматически изменяется и переменная. или есть событие, по которому мы можем присваивать значение?

если да, тогда схема действий может быть таковой:
- создаем объект XMLHttpRequest
- привязываем его к адресной строке
- заставляем каждый запрос проходить проверку, там же и ошибки обрабатываем

но не будет ли при такой схеме ФФ все равно выводить свои сообщения об ошибках? можно ли их "не пустить"?
PM ICQ   Вверх
12345c
Дата 16.2.2006, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



Нет, так нельзя, см.методы этого объекта, среди них не найдёте подобного. http://xulplanet.com/references/objref/XML...tml#method_send . Идея в том, что вызываете второй раз тот же адрес, а он берётся из кеша. И -
Цитата(12345c @ 16.2.2006, 18:29 Найти цитируемый пост)
но для FF не работает с чужими сайтами - XMLHttpRequest




--------------------
Google Code Playground - онлайн-отладка своих примеров HTML+JS без регистрации, с сохранением по URL, без кириллицы. Go
PM WWW   Вверх
Helene
Дата 18.2.2006, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 1.2.2006
Где: Киев

Репутация: нет
Всего: нет



ну что ж, в конце концов я своего добилась с помощью такой конструкции. теперь у меня есть возможность контроллировать загрузки страничек.

Код

var url_text;
var req;
var gURLBar;
var goButton;

function StatusChange()
{
  if (req.readyState==4)
  {
    // анализируем req.status
  }
}

function TryURL(url)
{
  getWebNavigation().stop(nsIWebNavigation.STOP_ALL);

  req = new XMLHttpRequest();
  req.onreadystatechange = StatusChange;
  req.open("GET", url, true);
  req.send(null);
}

function PressedKey(event)
{
  ch = event.which;
  if (ch==13)
  {
    url_text = gURLBar.value;
    TryURL(url_text);
  }
}

function goButtonClick(event)
{
  url_text = gURLBar.value;
  TryURL(url_text);
}

function UrlBarInit()
{
  gURLBar = document.getElementById("urlbar");
  if (gURLBar != null)
  {
    gURLBar.addEventListener("keypress", PressedKey, false);
  }
  goButton = document.getElementById("go-button");
  if (goButton != null)
  {
    goButton.addEventListener("command", goButtonClick, false);
  }
}

window.addEventListener('load', UrlBarInit, true);

PM ICQ   Вверх
12345c
Дата 18.2.2006, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



Спасибо, полезный будет код, нетривиальная задача.

Но, судя по тексту, он только для FF (Gecko) и не работает с чужими сайтами?


--------------------
Google Code Playground - онлайн-отладка своих примеров HTML+JS без регистрации, с сохранением по URL, без кириллицы. Go
PM WWW   Вверх
Helene
Дата 20.2.2006, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 1.2.2006
Где: Киев

Репутация: нет
Всего: нет



это расширение для FireFox, действующее по схеме:
1. пользователь пытается открыть страничку
2. загрузка останавливается
3. проверяется корректность адреса
4. в зависимости от результата проверки выполняются различные действия.
так что ему не важно, с какими страничками работать.

в нем все еще есть некоторые проблемы, вызванные с отсутствием события "начало загрузки страницы", так как приходится, роясь в коде FF, находить все места, из которых эта загрузка страницы возможна вообще. хотелось бы сделать это более элегантно.


p.s. кстати, есть еще одна интересная задача - перехват запуска файлов и их запуск определенным приложением, и все это под FreeBSD (хотя, по-моему, без разницы).
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0516 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.