Расширения для hackwrench

Захотелось сделать простые, но удобные расширения для hackwrench.

Первое что пришло на ум — создать базовый класс, например PluginBase, от которого будут наследоваться все расширения. В нужный момент мы можем получить список загруженных расширений вызвав PluginBase.__subclasses__()

Как-нибудь так: self.plugins = [plugin(self) for plugin in PluginBase.__subclasses__()]

В PluginBase мы определяем перечисляем все возможные методы, а конструктор его может выглядить как-нибудь так:

def __init__(self, parent):
   self.parent = parent
   for k, f in self.__class__.__dict__.items():
      if not k.startswith('_') and k in PluginBase.__dict__:
         print 'Found BasePlugin method %s in %r' % (k, self)

В моем браузере такой базовый класс называется hackwrench.browser.BrowserPlugin, его методы соответствуют сигналам webkit.WebView, только вместо дефиса — подчеркивание. Например сигналу load-finished соответствует load_finished; title-changed — title_changed и т.п.

Полный список: console_message, create_web_view, download_requested, hovering_over_link, icon_loaded, load_committed, load_error, load_finished, load_progress_changed, load_started, populate_popup, script_alert, title_changed

Для удобства, я сделал декоратор BrowserPlugin.stop, который делает для соотв. сигнала stop_emission — если хочется чтобы встроенный обработчик сигнала(и из других расширений) не сработал.

Пример:

from hackwrench.browser import BrowserPlugin
class Example(BrowserPlugin):
    def title_changed(self, view, frame, title):
        print 'Title changed', title
    @BrowserPlugin.stop
    def download_requested(self, view, download):
        print 'Download blocked', download.get_uri()
    @BrowserPlugin.stop
    def script_alert(self, view, frame, msg):
        """ javascript alert просто выводим в консоль; никаких диалоговых окон не показываем """
        print 'Javascript alert', msg

Расширения должны лежать в ~/.hackwrench/extensions или глобально — в подкаталоге extensions самого hackwrench.

Более сложные расширения можно посмотреть в исходниках, в каталоге extensions: поддержка userscripts и “открыть все выделенные ссылки в новых вкладках”

Add post to:   Delicious Reddit Slashdot Digg Technorati Google
Make comment

Comments

It’s really useful to make it — many of us just don’t have enough time for it.

Thank you and looking for more posts. I am really satisfied with this posting that you have given us. This is really a stupendous work done by you.

There was an issue with the class…oopps…I got that wrong. Your posts worked for me.

Jun Wilyard 30.11.2011 15:37

Thank you for this blog. Even if I didn’t understand what is in the blog but still I translate it to english in order to read your blog. [url=http://www.culinaryschoolstraining.com]Culinary Schools Training[/url]

ые хаве а ницы идеа. И шоп ые кан бе сукессфул ин макинг ит.

I actually love the codes.

Your article has impressed me cause it really is done well. Thank you very much

Your article has impressed me cause it really is done well. Thank you very much

epbgkzfl <a href=”http://accutane-skin.com/ “>accutane</a> :-O <a href=”http://bcheap-viagra.com/ “>generic viagra</a> 0620 <a href=”http://her-propecia.com/ “>propecia </a> 8]]] <a href=”http://bcheap-cialis.com/ “>cialis</a> KdYuiI

Required. 30 chars of fewer.

Required.

captcha image Please, enter symbols, which you see on the image