Возникла задача написание простенького расширения под все (по возможности) популярные браузеры. Деятельность расширения заключается во внедрении javascript`а в тело документа.
Доктор прописал инъекции javascript`а
Казалось бы все просто, выполняем в строке браузера код:
- javascript: var s = document.createElement('script');
- s.type='text/javascript';
- document.body.appendChild(s);
- s.src='script.js';
- void(0);
Но что делать если ваш скрипт должен обрабатывать все страницы чужого сайта. Не заставлять же пользователя постоянно click`ать по закладке с кодом инъекции после каждого перехода на новую страницу. Наивные поиски простого решения не увенчались успехом: - Это был перехват всех ссылок на страничке и добавление своего кода «javascript:”, разумеется код выполнялся в рамках открытой страницы и потом переходил на новую «чистую” страницу через (location.href).
- Вариант с setTimeout был вообще в порядке бреда… выполение отваливалось после начала загрузки новой страницы.
- IE 7+ (на 6-ку решил просто забить, много затрат ради небольшой аудитории пользователей – уж простите меня)
- Firefox 1.5+
- Chrome 4+
- Opera 9+ (в итоге оказалось extension`ы можно писать только под Opera 11)
- Safari 3+
Google Chrome
За час был написал extension для Chrome – масса документации на официальном сайте, масса примеров. В общем рай для разработчика.
Примеры и Руководство
фрагмент из background.html
- function onRequest(tabId, changeInfo, tab) {
- if (changeInfo.status == 'complete'){
- chrome.tabs.executeScript(tabId, { code:"код без javascript:" });
- };
- };
- chrome.tabs.onUpdated.addListener(onRequest);
Все получилось просто и со вкусом. Напрямую вставить в тело документа