Надстройка Firefox проверяет базу данных sqlite при событии

Я делаю надстройку Firefox с базой данных sqlite mydb.sqlite. Это база данных моих выбранных ссылок, и у меня есть событие загрузки для gBrowser. Теперь я хотел бы написать код, который будет проверять content.document.location при каждом событии загрузки и будет уведомлять меня, находится ли текущая открытая ссылка в базе данных или ее нет в базе данных (например, с каким-либо значком в строке состояния).

Вы знаете, как сделать это эффективно? Так что это не будет сильно замедлять Firefox?

Спасибо


person xralf    schedule 10.03.2011    source источник


Ответы (1)


  1. Убедитесь, что вы прослушиваете событие DOMContentLoaded, которое срабатывает при каждой загрузке страницы.

  2. Вы можете получить URL-адрес загруженной страницы из обработчика DOMContentLoaded, используя e.target.defaultView.location.href (где e должно быть тем, что вы назвали первым параметром в вашем обратном вызове).

  3. Теперь сравните этот URL с тем, что есть в БД. Рассмотрите возможность использования асинхронного выполнения операторов (только в Firefox 3.5 и новее), чтобы не блокировать основной поток без необходимости.

  4. В этом превосходном руководстве показано, как обновить строку состояния.

person Wayne    schedule 10.03.2011
comment
Спасибо за полезную информацию, а как бы вы провели сравнение на шаге 3? Последовательно сравнивать ссылку в каждой записи с загруженным href? Что делать, если у меня есть 10000 ссылок через какое-то время? Это все еще эффективно или есть какой-то трюк для большей эффективности? - person xralf; 10.03.2011
comment
@xralf - Просто позвольте БД сделать это за вас. Запросите таблицу, запрашивая любые записи, соответствующие URL-адресу страницы, на которой вы сейчас находитесь. Если запрос возвращает какие-либо результаты, значит, вы нашли совпадение. Не забудьте установить ограничение UNIQUE для столбца URL, чтобы ограничить размер таблицы (и создать соответствующий индекс). Я думаю, ты должен быть в порядке. - person Wayne; 11.03.2011