Полезная информация

Юристы зарабатывают огромные деньги и славу, оперируя хорошим знанием законов. Правила форума — простой путь к успешному общению.

№122-06-2008 01:55:01

Bananas
Участник
 
Группа: Members
Откуда: Minsk, Belarus
Зарегистрирован: 12-03-2005
Сообщений: 1059
UA: Firefox 3.0
Веб-сайт

Простое расширение

Давно собирался, и наконец собрался. Хочется сделать маленькую полезность. Расширение которое периодически загружает определенную страницу(с авторизацией логин/пасс), парсит и выводит в панель в статусбаре некоторую информацию.

Как можно сделать это проще всего? Какие вещи посмотреть?

1. простейшую заготовку расширения
2. чтение переменных из about:config
3. загрузка страницы с авторизацией
4. добавление панели в статусбар
5. отображение информации


Sometimes I give myself the creeps,
Sometimes my mind plays tricks on me...

Отсутствует

 

№222-06-2008 02:09:20

Psilon
Участник
 
Группа: Extensions
Откуда: Город-герой Москва
Зарегистрирован: 07-02-2005
Сообщений: 1452
UA: Minefield 3.1

Re: Простое расширение

Bananas
Gmail manager делает как раз то, что тебе нужно. Посмотри как в нём, может пригодится.


Мир, в котором человек больше не властен
Мир, принадлежащий машинам...

Отсутствует

 

№322-06-2008 02:09:27

Shutnik
Участник
 
Группа: Extensions
Зарегистрирован: 12-11-2005
Сообщений: 3785
UA: Firefox 3.0

Re: Простое расширение

Как можно сделать это проще всего? Какие вещи посмотреть?

это и так делается не слишком трудно :)

1. простейшую заготовку расширения

http://developer.mozilla.org/en/docs/install.rdf
http://developer.mozilla.org/en/docs/chrome.manifest

2. чтение переменных из about:config

http://developer.mozilla.org/en/docs/Co … references

3. загрузка страницы с авторизацией

http://developer.mozilla.org/en/docs/AJ … ng_Started

4. добавление панели в статусбар

http://developer.mozilla.org/en/docs/XUL:statusbar

5. отображение информации

http://developer.mozilla.org/en/docs/Dy … _interface

Отсутствует

 

№422-06-2008 05:00:06

Bananas
Участник
 
Группа: Members
Откуда: Minsk, Belarus
Зарегистрирован: 12-03-2005
Сообщений: 1059
UA: Firefox 3.0
Веб-сайт

Re: Простое расширение

спасибо, написал простенькое расширение, страница загружается и панелька есть, опции читает, все ок.

Но при парсинге появилась проблема, регэксп с русскими буквами не палит. Есть ли пример парсинга html?

upd. видно чтото с кодировками...

Отредактировано Bananas (22-06-2008 06:35:57)


Sometimes I give myself the creeps,
Sometimes my mind plays tricks on me...

Отсутствует

 

№522-06-2008 08:02:53

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 2.0
Веб-сайт

Re: Простое расширение

Bananas

регэксп с русскими буквами не палит

В responseText ? Можно попробовать распарсить в html:

Выделить код

Код:

...
var dp = Components. classes ["@mozilla.org/xmlextras/domparser;1"].
             createInstance (Components. interfaces. nsIDOMParser);
var doc = dp. parseFromString (string, "application/xhtml+xml");
var header = doc. documentElement. getElementsByTagName ("head") [0];
var body = doc. documentElement. getElementsByTagName ("body") [0];
...

в DOM проблемы с кодировкой не должно быть.


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№622-06-2008 14:34:43

Bananas
Участник
 
Группа: Members
Откуда: Minsk, Belarus
Зарегистрирован: 12-03-2005
Сообщений: 1059
UA: Firefox 3.0
Веб-сайт

Re: Простое расширение

не парсит, getElementsByTagName возвращает undefined, html генерирует сервер и он не валидный плюс кодировка стоит win1251.
заодно нашел такой баг https://bugzilla.mozilla.org/show_bug.cgi?id=102699

пробую дальше...

видимо пока этот баг не пофиксят надо использовать скрытый ифрейм в скрытом окне, жесть, не умею..
  http://developer.mozilla.org/en/docs/Parsing_HTML_From_Chrome

Отредактировано Bananas (22-06-2008 14:49:18)


Sometimes I give myself the creeps,
Sometimes my mind plays tricks on me...

Отсутствует

 

№722-06-2008 14:44:18

Shutnik
Участник
 
Группа: Extensions
Зарегистрирован: 12-11-2005
Сообщений: 3785
UA: Firefox 3.0

Re: Простое расширение

Но при парсинге появилась проблема, регэксп с русскими буквами не палит.

не должно быть такой проблемы. как пробуешь?

Отсутствует

 

№822-06-2008 14:56:06

Bananas
Участник
 
Группа: Members
Откуда: Minsk, Belarus
Зарегистрирован: 12-03-2005
Сообщений: 1059
UA: Firefox 3.0
Веб-сайт

Re: Простое расширение

как пробую?)

var arr = /(на сумму)/i.exec(response);

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

--
попробовал http://tanalin.com/blog/2008/05/pure-ja … ml-parser/
похоже дело именно в кодировке(((

Отредактировано Bananas (22-06-2008 15:12:34)


Sometimes I give myself the creeps,
Sometimes my mind plays tricks on me...

Отсутствует

 

№922-06-2008 15:17:57

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 2.0
Веб-сайт

Re: Простое расширение

Ну, можно попробовать http://www.xulplanet.com/references/xpcomref/ifaces/nsIScriptableUnicodeConverter.html
charset="windows-1251"...ConvertToUnicode(...)

Добавлено Sun Jun 22 15:27:27 2008 :
ps.

не парсит, getElementsByTagName возвращает undefined

как getElementsByTagName может вообще что-то возвращать, если "не парсит" ?


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№1022-06-2008 15:36:47

Bananas
Участник
 
Группа: Members
Откуда: Minsk, Belarus
Зарегистрирован: 12-03-2005
Сообщений: 1059
UA: Firefox 3.0
Веб-сайт

Re: Простое расширение

попробовал, не помогло :/

---

под "не парсит" я имел ввиду
если использовать этот фрагмент:

var dp = Components. classes ["@mozilla.org/xmlextras/domparser;1"]. createInstance (Components. interfaces. nsIDOMParser); var doc = dp. parseFromString (string, "application/xhtml+xml"); var header = doc. documentElement. getElementsByTagName ("head") [0]; var body = doc. documentElement. getElementsByTagName ("body") [0];

body будет undefined и тд.

может чтото он и парсит, но результата нет.

Отредактировано Bananas (22-06-2008 15:41:42)


Sometimes I give myself the creeps,
Sometimes my mind plays tricks on me...

Отсутствует

 

№1122-06-2008 15:42:36

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 2.0
Веб-сайт

Re: Простое расширение

body будет undefined и тд.

Т. е., getElementsByTagName вызывается ? А тогда, если в doc не документ с сообщением об ошибке парсинга, то можно попробовать добраться к нужному элементу другим способом.


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№1222-06-2008 16:02:41

Bananas
Участник
 
Группа: Members
Откуда: Minsk, Belarus
Зарегистрирован: 12-03-2005
Сообщений: 1059
UA: Firefox 3.0
Веб-сайт

Re: Простое расширение

вот что в консоли

Error: mismatched tag. Expected: </link>.
Source File: moz-nullprincipal:{bf857b88-5f46-48a9-923a-f720f541981e}
Line: 1, Column: 298
Source Code:
<html><head><title>....</body></html>


Sometimes I give myself the creeps,
Sometimes my mind plays tricks on me...

Отсутствует

 

№1322-06-2008 16:09:36

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 2.0
Веб-сайт

Re: Простое расширение

Ну, значит там всё-таки <parseerror...
Если responseText никак не перекодировать, тогда не знаю

Добавлено Sun Jun 22 16:30:46 2008 :

попробовал, не помогло

Ну, может не ConvertToUnicode, может ConvertFromUnicode, может быть, с промежуточным преобразованием


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№1422-06-2008 16:46:01

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 3.0

Re: Простое расширение

Anton

Ну, значит там всё-таки <parseerror...

А нельзя ли тогда парсить, как HTML 4.01 transitional (а не "application/xhtml+xml" aka XHTML strict)?

Добавлено Sun Jun 22 16:48:35 2008 :
Или в этом и заключается баг https://bugzilla.mozilla.org/show_bug.cgi?id=102699, что нельзя :/

Добавлено Sun Jun 22 16:50:45 2008 :
Тогда есть мегахак вида
[uli]создать <browser>[/uli][uli]скормить ему через innerHTML строку[/uli]

Отредактировано Infocatcher (22-06-2008 16:52:28)


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№1522-06-2008 16:54:06

Bananas
Участник
 
Группа: Members
Откуда: Minsk, Belarus
Зарегистрирован: 12-03-2005
Сообщений: 1059
UA: Firefox 3.0
Веб-сайт

Re: Простое расширение

сделал (точнее нашел и вырезал) через ифрейм мот кому полезно будет

Выделить код

Код:

var _iframe;

function parse(htmlText)
{
    // Find a window to stick our hidden iframe into.
    var windowMediator = Cc['@mozilla.org/appshell/window-mediator;1'].
                         getService(Ci.nsIWindowMediator);
    var window = windowMediator.getMostRecentWindow("navigator:browser");
    // XXX We can use other windows, too, so perhaps we should try to get
    // some other window if there's no browser window open.  Perhaps we should
    // even prefer other windows, since there's less chance of any browser
    // window machinery like throbbers treating our load like one initiated
    // by the user.
    if (!window) {
      var icon = document.getElementById('adslpanel');
      icon.setAttribute("status", "failed");
      icon.label = "failed";
      return;
    }
    var document = window.document;
    var rootElement = document.documentElement;
  
    if (_iframe) {
       if (_iframe && _iframe.parentNode)
         _iframe.parentNode.removeChild(_iframe);
       _iframe = null;
    }

  
    // Create an iframe, make it hidden, and secure it against untrusted content.
    _iframe = document.createElement('iframe');
    _iframe.setAttribute("collapsed", true);
    _iframe.setAttribute("type", "content");
  
    // Insert the iframe into the window, creating the doc shell.
    rootElement.appendChild(_iframe);

    // When we insert the iframe into the window, it immediately starts loading
    // about:blank, which we don't need and could even hurt us (for example
    // by triggering bugs like bug 344305), so cancel that load.
    var webNav = _iframe.docShell.QueryInterface(Ci.nsIWebNavigation);
    webNav.stop(Ci.nsIWebNavigation.STOP_NETWORK);

    // Turn off JavaScript and auth dialogs for security and other things
    // to reduce network load.
    // XXX We should also turn off CSS.
    _iframe.docShell.allowJavascript = false;
    _iframe.docShell.allowAuth = false;
    _iframe.docShell.allowPlugins = false;
    _iframe.docShell.allowMetaRedirects = false;
    _iframe.docShell.allowSubframes = false;
    _iframe.docShell.allowImages = false;
    
    // Convert the HTML text into an input stream.
    var converter = Cc["@mozilla.org/intl/scriptableunicodeconverter"].
                    createInstance(Ci.nsIScriptableUnicodeConverter);
    converter.charset = "windows-1251";
    var stream = converter.convertToInputStream(htmlText);
    
    // Set up a channel to load the input stream.
    var channel = Cc["@mozilla.org/network/input-stream-channel;1"].
                  createInstance(Ci.nsIInputStreamChannel);
    var ios = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
              
                  
    channel.setURI(ios.newURI("https://www.example.by/", "windows-1251",null));
    channel.contentStream = stream;
    
    // Load in the background so we don't trigger web progress listeners.
    var request = channel.QueryInterface(Ci.nsIRequest);
    request.loadFlags |= Ci.nsIRequest.LOAD_BACKGROUND;

    // Specify the content type since we're not loading content from a server,
    // so it won't get specified for us, and if we don't specify it ourselves,
    // then Firefox will prompt the user to download content of "unknown type".
    var baseChannel = channel.QueryInterface(Ci.nsIChannel);
    baseChannel.contentType = "text/html";

    // Load as UTF-8, which it'll always be, because XMLHttpRequest converts
    // the text (i.e. XMLHTTPRequest.responseText) from its original charset
    // to UTF-16, then the string input stream component converts it to UTF-8.
    baseChannel.contentCharset = "UTF-8";
    
    // Register the parse handler as a load event listener and start the load.
    // Listen for "DOMContentLoaded" instead of "load" because background loads
    // don't fire "load" events.
    _iframe.addEventListener("DOMContentLoaded", parseHandler1, true);

    var uriLoader = Cc["@mozilla.org/uriloader;1"].getService(Ci.nsIURILoader);
    uriLoader.openURI(channel, true, _iframe.docShell);
}

  function parseHandler1(event)
  {
    alert(_iframe.contentDocument.getElementsByTagName("table")[11].innerHTML);
    //event.target.removeEventListener("DOMContentLoaded", this, false);
  }

Отредактировано Bananas (22-06-2008 19:00:38)


Sometimes I give myself the creeps,
Sometimes my mind plays tricks on me...

Отсутствует

 

№1622-06-2008 19:00:52

Bananas
Участник
 
Группа: Members
Откуда: Minsk, Belarus
Зарегистрирован: 12-03-2005
Сообщений: 1059
UA: Firefox 3.0
Веб-сайт

Re: Простое расширение

не вызывает ли этот код мемори лик? как правильно заремувить  листенер parseHandler1?

еще вопрос появился можно ли использовать для хранения паролей встроенный менеджер файрфокса?


Sometimes I give myself the creeps,
Sometimes my mind plays tricks on me...

Отсутствует

 

№1722-06-2008 22:32:54

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 2.0
Веб-сайт

Re: Простое расширение

как правильно заремувить  листенер parseHandler1

Раскомментировать event.target..., вместо this написать parseHandler1.

можно ли использовать для хранения паролей встроенный менеджер файрфокса

можно.


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№1822-06-2008 22:41:08

Al_H
Away
 
Группа: Members
Откуда: SPb
Зарегистрирован: 10-06-2005
Сообщений: 5508
UA: Sunrise 1.7

Re: Простое расширение

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

Отсутствует

 

№1922-06-2008 23:14:53

Bananas
Участник
 
Группа: Members
Откуда: Minsk, Belarus
Зарегистрирован: 12-03-2005
Сообщений: 1059
UA: Firefox 3.0
Веб-сайт

Re: Простое расширение

Anton
спасибо, буду пробовать. апд. с менеджером паролей разобрался, надо будет заимплементить.

Al_H
в статусе 1 значок и одна цифра, остальная инфа в тултипе (ее не так много), меньше наверное никак. можно было бы делать боковую панель, но показывать особо нечего информация представляет собой аккаунт провайдера т.е. осталось стока-то, внутреннего, внешнего траффика, и остаток дней.

раньше у меня было много расширений http://bananas.at.tut.by/htm.html но постепенно многие отпали либо перестали поддерживать либо пропала надобность, редко использемые я отключаю.

результат можно посмотреть здесь http://bananas.at.tut.by/adsl.html пока что это просто тест.

Отредактировано Bananas (23-06-2008 03:42:13)


Sometimes I give myself the creeps,
Sometimes my mind plays tricks on me...

Отсутствует

 

№2026-06-2008 15:38:58

Bananas
Участник
 
Группа: Members
Откуда: Minsk, Belarus
Зарегистрирован: 12-03-2005
Сообщений: 1059
UA: Firefox 3.0
Веб-сайт

Re: Простое расширение

Появился еще вопрос.

если логин и пароль будут неверными в xmlhttprequest , фф покажет стандартное окно с предложение ввести пароль, можно ли это перехватить или  обработать?


Sometimes I give myself the creeps,
Sometimes my mind plays tricks on me...

Отсутствует

 

№2126-06-2008 16:07:59

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 2.0
Веб-сайт

Re: Простое расширение

Оверлей на chrome://global/content/commonDialog.xul ?
Но, думаю, стоит сначала поискать решение покрасивее.


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№2226-06-2008 16:53:03

Bananas
Участник
 
Группа: Members
Откуда: Minsk, Belarus
Зарегистрирован: 12-03-2005
Сообщений: 1059
UA: Firefox 3.0
Веб-сайт

Re: Простое расширение

кстати на каких англоязычных форумах можно задать вопросы по разработке?

----
мдеее...

http://xpoint.ru/forums/programming/jav … 9752.xhtml

Отредактировано Bananas (26-06-2008 17:10:30)


Sometimes I give myself the creeps,
Sometimes my mind plays tricks on me...

Отсутствует

 

№2330-06-2008 10:55:20

Bananas
Участник
 
Группа: Members
Откуда: Minsk, Belarus
Зарегистрирован: 12-03-2005
Сообщений: 1059
UA: Firefox 3.0
Веб-сайт

Re: Простое расширение

И еще вопрос, попап из nsIAlertsService может быть только однострочным? или можно как то обойти это?

Отредактировано Bananas (30-06-2008 12:05:32)


Sometimes I give myself the creeps,
Sometimes my mind plays tricks on me...

Отсутствует

 

№2430-06-2008 14:34:19

Shutnik
Участник
 
Группа: Extensions
Зарегистрирован: 12-11-2005
Сообщений: 3785
UA: Firefox 3.0

Re: Простое расширение

\n ?

Отсутствует

 

№2530-06-2008 14:57:44

Bananas
Участник
 
Группа: Members
Откуда: Minsk, Belarus
Зарегистрирован: 12-03-2005
Сообщений: 1059
UA: Firefox 3.0
Веб-сайт

Re: Простое расширение

Shutnik пишет

\n ?

не катит, пробовал

---

как правильно сделать оверлей диалоговых окон? точнее как узнать что это именно тот случай когда надо применить специальный вид?

придется сделать оверлеи на
chrome://global/content/commonDialog.xul
и
chrome://global/content/alerts/alert.xul

Отредактировано Bananas (30-06-2008 15:07:25)


Sometimes I give myself the creeps,
Sometimes my mind plays tricks on me...

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]