27 lipca 2013

Firefox - plugin na bazie FireBreath

Szukam sposobu, na podpięcie się do przeglądarki i dobranie się do źródła wyświetlanej strony - co w konsekwencji jeszcze nie całkiem mi się nie udało. Padło na stworzenie rozszerzenia do przeglądarki. Firefox oferuje interfejs NPAPI (http://en.wikipedia.org/wiki/NPAPI) do takie celów. Projekt FireBreath, umożliwia tworzenie rozszerzeń na różne przeglądarki pod różne systemy. Instalacja frameworka jest bardzo przyjemna.
#wymagana jest wcześniejsza instalacja libgtk
sudo apt-get install libgtk2.0-dev

git clone git://github.com/firebreath/FireBreath.git -b firebreath-1.7 firebreath-1.7
cd firebreath-1.7
# zaciągane są potrzebne biblioteki np. boost
git submodule update --recursive --init

# budowanie przykładów dostarczonych z projektem
./prepmake.sh examples
cd buildex/
make
Autorzy dostarczają także kilka wideo tutoriali, który szybciej pozwalają zapoznać się z architekturą całego projektu.
Mamy też do dyspozycji odpowiednie skrypty, umożliwiające stworzenie szkieletu pod nasz projekt. Autor nawet zaleca, by nie by tworzyć go zupełnie na zewnątrz, a firebreath podpiąć jako submoduł.
cd firebreath-1.7
./fbgen.py
# Plugin Name []: BeruPlugin
# Plugin Identifier [BeruPlugin]: 
# Plugin Prefix [BPL]: 
# Plugin MIME type [application/x-beruplugin]: 
# Plugin Description []: Beru Testing Plugin
# Plugin has no UI [false]: 
# Company Name []: NiegodziwyBeru
# Company Identifier [NiegodziwyBeru]: 
# Company Domain [niegodziwyberu.com]: nberu.blogspot.com         

# Dobrą praktyk jest rozpoczęcie pracy od stworzenia repozytorium
mv projects/BeruPlugin/ ../
cd ../BeruPlugin/
git init .
git add .
git commit -m"Beru Plugin first commit"

# ustawiamy firebreath jako submodułu
git submodule add git://github.com/firebreath/FireBreath.git firebreath
git submodule update --init --recursive
git commit -m"Added firebreath as submodule"

# Budowanie
./firebreath/prepmake.sh . build/
cd build
make

# Kopiowanie naszego rozszerzenie stamtąd zostanie 
# automatycznie zaczytany przez Firefoxa
cp bin/BeruPlugin/npBeruPlugin.so ~/.mozilla/plugins/
Wciąż nie wiem, czy możliwe jest dobranie się całego źródła strony. Poniżej mały eksperyment pokazujący możliwości rozszerzenia , czyli pobranie adresu strony, z której został zawołany (http://www.firebreath.org/display/documentation/Tips+and+Tricks#TipsandTricks-GettingtheURLofthecurrentpage).
void BeruPlugin::onPluginReady()
{
    // When this is called, the BrowserHost is attached, the JSAPI object is
    // created, and we are ready to interact with the page and such.  The
    // PluginWindow may or may not have already fire the AttachedEvent at
    // this point.
    const std::string current_url = m_host->getDOMWindow()->getLocation();
    const std::string page_html = m_host->getDOMElement()->getInnerHTML();

    std::ofstream f;
    f.open("/home/beru/BeruPluginLog.txt", std::ios_base::out | std::ios_base::app);
    f << current_url << std::endl;
    if (page_html.empty())
        f << "Empty content " << std::endl;
    else
        f << "Content: " << page_html << std::endl;
    f << "-------------------------" << std::endl;
    f.close();
}
Ładowania rozszerzenia.
<html>
<head>
<title>Test page for object beruplugin</title>
</head>
<object id="player" type="application/x-beruplugin" width="300" height="200">
aaa<i>iii</i></object>
<br/>
<b>Hello world application/x-beruplugin</b>
</html>
I wynik działania:
file:///home/beru/test.html
Content: aaa<i>iii</i>
-------------------------

Brak komentarzy:

Prześlij komentarz