2016-07-26 2 views
6

私は(ウィンドウに包まれた)私の見解を作成し、次のようにURLをロードしていますGtk 3.0とWebKit2 4.0を使ってPythonのリンク上のクリックを処理する方法は?

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

私の「ミニブラウザ」が起動し、私は地元のリンクをクリックすることができます(JavaScriptのイベントにバインドされているリンクや同じドメイン上の他のページへのリンク)。しかし、リンクが他のドメインを指しているときは、何も起こりません。外部リンクのクリックを捕捉するにはどうすればよいですか?または、システムのデフォルトブラウザでこれらのリンクを開くにはどうすればよいですか?

更新:クロスサイトリンクは「ミニブラウザ」で処理されません。 「ミニブラウザ」を中断し、カスタムロジックに基づいて動作するイベントフック(onclick)を書くことができますか、またはクロスサイトリンクを設定する方法があります。

+0

あなたはデフォルトのWebkitを使用していますか? gtk:pywebkitgtk(https://code.google.com/archive/p/pywebkitgtk)用のPythonベースのWebkitがありますが、これはデフォルトのpython-webkit2よりも優れている可能性があります。 [Here](https://stackoverflow.com/questions/647041/need-a-simple-hello-world-example-using-the-webkit-library-in-python)はいくつかの使用例です – Alex

+0

ここでは[example (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をインストールすることができますのDebianベースのディストリビューションのために、このようなhttp://ftp://

としてURIスキームのサポートを得るためにgvfsをインストールする必要があります。

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

それが解決しない場合は、さらに、それは同じように、カスタムブラウザの場合FALSE

を返す場合には、gtk_show_uriのエラー・メッセージを確認することができますあなたの文書によると、GtkLinkButtonの文書によれば、activate-link signalに接続して、ハンドラからtrueを返す必要があります。おそらく既にそうしています。

+0

PythonからGtkLinkBut​​tonを使用する方法のドキュメントはありますか? – Witek

+0

リンクボタンの[gtk pythonの公式な文書](https://developer.gnome.org/pygtk/stable/class-gtklinkbutton.html)と[ここ](http:// python-gtk-3 -tutorial.readthedocs.io/en/latest/button_widgets.html)はチュートリアルで、link-buttonのpython-snippetsも提供しています。 – Alex

+0

今私はそれを取得しません。 LinkBut​​tonは何のために使うのですか?私は、私のWebViewで働くために私のWebViewのリンクが必要です... – Witek

0

GtkLinkButton答えは実際には外れています。これはGtkLinkButtonと何も関係がなく、WebKitはリンクをロードするためにgvfsを使用しないためです。

なぜクロスドメインリンクが機能しないのかわかりません。デフォルトで動作するはずです。 WebKitWebView::decide-policyシグナルを使用してこの動作を制御できますが、デフォルトのポリシーではリンクを開く必要があります。

あなたはあなたの目標_blankとのリンクに問題があるとあなたのコメントで述べました。これらは、あなたがテストしている唯一のクロスドメインリンクでしたか?その問題は簡単です:WebKitは新しいウィンドウを自動的に開くことができません。そのためにコードを記述する必要があります。幸いにもそれはかなり簡単です:WebKitWebView::createに接続し、そこの文書に従ってください。新しいGtkWindowを作成し、に関連する WebKitWebViewを作成し、新しいビューをウィンドウにパックし、新しいビューのWebKitWebView::ready-to-showに接続し、その信号が放出されたときにウィンドウを表示する必要があります。

関連する問題