Где находится URI нового окна в create-web-view?
Согласно документации, сигнал create-new-window вызывается, когда webkit создает новое окно. Я пытался переопределить это, чтобы справиться <a target='_blank'
ссылки в браузере PyGTK. В подклассе WebView у меня есть:
...
self.connect("create-web-view", self.newWin)
...
def newWin(view, frame, data):
print view.get_property('uri')
print frame.get_property('uri')
print data.get_property('uri')
Он вызывается при нажатии на ссылку в новом окне, но по какой-то причине все эти объекты показывают одинаковый URL-адрес, терминал печатает URL-адрес текущей страницы три раза. Как я могу найти URL, который должен быть передан в новое окно?
Благодаря ptomato я нашел решение. Установка сигнала для этой функции работает:
...
self.connect("new-window-policy-decision-requested", self.newWin) #requires webkit 1.1.4
...
def newWin(self, view, frame, request, nav_action, policy_decision):
"""
Calls the default browser on external link requests.
"""
functiontoviewurl(request.get_uri())
# According to the documentation: http://webkitgtk.org/reference/webkitgtk/stable/webkitgtk-webkitwebview.html#WebKitWebView-new-window-policy-decision-requested
# call ignore on the policy decision, then return true (that is, we handled it).
policy_decision.ignore()
return True
1 ответ
Вы не можете перехватить создание нового окна, перехватывая этот сигнал - к тому времени браузер уже решил, что создаст новое окно. Вместо этого подключитесь к new-window-policy-decision-requested
и получить URI из request
параметр.