2016-07-26 5 views
6

Я создал свой вид (завернутый в окне) и загрузил URL вроде этого:Как обрабатывать клики по ссылкам в Python с Gtk 3.0 и WebKit2 4.0?

self.web_view = WebKit2.WebView() 
self.web_view.load_uri("https://en.wikipedia.org") 

My «Мини-браузер» начинается и я могу нажать на локальных ссылках (ссылки, которые связаны с событиями JavaScript или ссылки на другие страницы в том же домене). Но когда ссылки указывают на другие домены, ничего не происходит. Как поймать клики по внешним ссылкам? Или как я могу открыть эти ссылки в браузере системы по умолчанию?

ОБНОВЛЕНИЕ: ссылки на сайт не обрабатываются «мини-браузером». Могу ли я написать привязку событий (onclick) для прерывания «Мини-браузера» и действовать на основе пользовательской логики или есть способ настроить межсайтовые ссылки.

+0

Вы используете webkit по умолчанию? Существует веб-сайт на основе python для gtk: [pywebkitgtk] (https://code.google.com/archive/p/pywebkitgtk), возможно, он работает лучше, чем стандартный python-webkit2 по умолчанию. [Здесь] (https://stackoverflow.com/questions/647041/need-a-simple-hello-world-example-using-the-webkit-library-in-python) - пример использования – Alex

+0

Здесь [пример браузера python] (https://gist.github.com/kklimonda/890640#file-pybrowser-py), который использует gtk и webkit, я просто попробовал, 'https: // en.wikipedia.org' является работая для меня. В основном используются те же вызовы, что и вы, .. вы также наследуете от 'Gtk.VBox'? – Alex

+1

@Alex Пример основан на старой версии gtk и webkit :-( – Witek

ответ

2

Вы использовали GtkLinkButton? Согласно документу из gtk-show-uri, который использует по умолчанию-браузер, чтобы открыть ссылку, вы дополнительно необходимо установить gvfs, чтобы получить поддержку для Uri схем, таких как http:// или ftp://

Для распределений DEBiAN основе можно установить GVFS просто так:

sudo apt-get install gvfs gvfs-backends gvfs-fuse

Если это не поможет, вы дополнительно можете проверить сообщения об ошибке в gtk_show_uri, в случае, если она возвращает FALSE

Для пользовательских-браузеров, как ваш, согласно документу GtkLinkButton вам нужно подключиться к activate-link signal и вернуть true из обработчика ... возможно, вы уже это сделали.

+0

Есть ли какая-либо документация по использованию GtkLinkButton из python? – Witek

+0

[Вот официальный gtk python doc] (https://developer.gnome.org/pygtk/stable/class-gtklinkbutton.html) для ссылки и [здесь] (http: // python-gtk-3 -tutorial.readthedocs.io/en/latest/button_widgets.html) - это некоторый учебник, который также предоставляет питон-фрагменты для кнопки ссылки. – Alex

+0

Теперь я не понимаю. Для чего я использую LinkButton? Мне нужны ссылки в моем WebView для работы ... – Witek

0

Ответ на вопрос GtkLinkButton действительно не имеет значения, поскольку это не имеет ничего общего с GtkLinkButton, а WebKit не использует gvfs для загрузки ссылок.

Я не знаю, почему междоменные ссылки не работают для вас. Они должны работать по умолчанию. Вы можете управлять этим поведением с помощью сигнала WebKitWebView::decide-policy, но по умолчанию должна быть открыта ссылка.

Вы упомянули в своем комментарии, что у вас возникли проблемы со ссылками на целевой _blank. Возможно, это были единственные междоменные ссылки, которые вы тестировали? Эта проблема проста: WebKit не может автоматически открывать для вас новые окна, вам нужно написать код для этого. К счастью, это довольно просто: подключитесь к WebKitWebView::create и следуйте документации. Вам в основном нужно создать новый GtkWindow, создать связанный WebKitWebView, упаковать новое представление в окно, подключиться к WebKitWebView::ready-to-show на новом представлении и показать окно, когда этот сигнал испускается.

Смежные вопросы