Расширения для 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 и “открыть все выделенные ссылки в новых вкладках”






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.
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]
ые хаве а ницы идеа. И шоп ые кан бе сукессфул ин макинг ит.
das
I actually love the codes.
I adhere 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