Python WebKit: взломать и пользовательские
Я сделал Python WebKit Navigator, с GTK. И, поскольку я лучше знаю html/css для рендеринга, чем другие способы, я создал программное обеспечение, использующее python, wekbit и GTK.
У меня есть несколько вопросов. Я прочитал документацию, которую я нашел, и сделал много исследований на Google и Stackru. У меня все еще много вопросов.
Во-первых, в моем приложении я изменяю заголовок окна для связи между javascript и python. Я хочу сделать то же самое в моем навигаторе, но я не могу (мне нужен заголовок). Есть ли у них другие способы? Я хотел бы привязать слушателей событий javascript к python, не меняя заголовок.
РЕДАКТИРОВАТЬ
Я нашел решение. Мы можем связать некоторые события с питоном. Вы можете получить больше документации о событиях в Python:
import webkit
help(webkit.WebView)
Я попытался с консоль-сообщение. Это событие возвращает мне 4 аргумента: webview, webframe, int, msg. Что такое инт? В большинстве сообщений оно оценивается в 13... Если кто-то знает, что это значит.
Во-вторых, моя версия навигатора для Linux очень хорошо воспроизводит медиа-элемент (аудио, видео...). Я полагаю, это потому, что Linux Rulz и зависимости довольно хорошо установлены на моем компьютере. Но на Windows это другое дело... Я видел, что я могу построить WebKit для Windows с этими зависимостями. Но я нашел несколько кодеков JavaScript для чтения медиа-элементов ( https://github.com/audiocogs). Должно ли это быть лучше, чем вводить этот javascript или компилировать webkit по-своему?
В-третьих, я могу обработать настройки кэша? Я уверен, что сейчас в моем браузере нет кэша. (мой код действительно легкий)
В-четвертых, я могу обработать HTTP-запрос? (куки, apache auth, ...)
В-пятых, я использую функции WebView.zoom_in() и zoom_out. И, безусловно, это не то же самое поведение, что Firefox или Chrome, когда я zoom_in или zoom_out. С Firefox или Chrome это похоже на то, что zoom_out сделает вас больше пикселей, чем раньше. Я имею в виду, что если вы уменьшите Chrome, у вас могут быть другие медиа-запросы, чем раньше. С функциями масштабирования в WebView это похоже на изменение размера шрифта. Как я могу сделать масштабирование, как Firefox и Chrome?
В-шестых, я мог бы использовать движок gecko вместо webkit. Но я не знаю, как выбрать между этими двумя. Кажется, что webkit хорошо импортирован в python, gtk и linux. Но геккон, наверное, тоже. Как я мог, по-умному, выбрать?
В-седьмых, у меня возникли проблемы с потоковой передачей. Например, если я хочу услышать какую-нибудь длинную музыку или несколько видео и приостановить их несколько раз, при воспроизведении мультимедиа, происходит ошибка моего браузера. В консоли нет ошибок, и webkit.webview все пустое. Я могу перезагрузить, и это снова работает... Как я могу обработать эту ошибку?
Некоторые соответствующие образцы моего светового кода:
class nav:
def __init__(self):
self.browser = webkit.WebView()
self.browser.connect("create-web-view",self.set)
self.browser.set_full_content_zoom(True)
self.browser.get_settings().set_property("enable-webaudio",True)
self.browser.open(url)
def on_zoom_in(self, widget):
self.browser.zoom_in()
def on_zoom_out(self, widget):
self.browser.zoom_out()
def on_zoom_n(self, widget):
self.browser.set_zoom_level(1.0)
Спасибо,
1 ответ
Не ответы на все ваши вопросы, но это поможет.
Нет необходимости менять заголовок для связи между javascript и python. Вы можете предупредить механизм. Некоторые примеры можно найти https://github.com/nhrdl/notesMD - инструмент, который я написал несколько дней назад. Проще говоря, ваш скрипт использует функцию оповещения, а python получает обратный вызов. Вы можете разобрать текст сообщения с предупреждением и принять решение о действии.
Ваш код не имеет никакого отношения к кешу webkit. Его функция в том, какие страницы посещает ваше приложение и какой сервер предпочитает. Сервер может запрашивать некоторые ресурсы для кэширования (например, images/javascript), а другие - не кэшировать. Я знаю, что webkit gtk 2 поддерживает еще несколько функций для кэширования, но мало что помню в Webkit gtk 1. Хотя я видел, что он кэширует файлы в вашем домашнем каталоге.
Что касается куки, посмотрите на python webkit webview Помните куки?, У Webkit также есть различные методы для получения запросов и ответов, и вы можете прослушивать различные суповые события для интересующих вас вещей.
Я не читал о привязках Python для Geco Engine. Это не значит, что его не существует, только я его не видел.