ドキュメントによると、create-new-window シグナルは、Webkit が新しいウィンドウを作成しているときに呼び出されます。これをオーバーライドして<a target='_blank'
、PyGTK Webkit ブラウザーでリンクを処理しようとしています。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 を 3 回出力します。新しいウィンドウに渡されるはずの 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