Где находится 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 параметр.

Другие вопросы по тегам