我試圖打開我的應用程序中使用QWebView的新選項卡中點擊鏈接。即使我將一個插槽綁定到linkClicked
信號上,在某個頁面(DuckDuckGo)上,該信號也不會被髮射。QWebView:linkClicked不會與某些頁面發射(JavaScript?)
考慮這個(PyQt的)例如:
#!/usr/bin/python
import sys
from PyQt5.QtCore import QUrl
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWebKitWidgets import QWebView, QWebPage
app = QApplication(sys.argv)
wv = QWebView()
wv.load(QUrl.fromUserInput(sys.argv[1]))
wv.page().setLinkDelegationPolicy(QWebPage.DelegateAllLinks)
wv.page().linkClicked.connect(lambda url: print("Clicked: " + url.toString()))
wv.show()
app.exec_()
說明我正確設置linkDelegationPolicy
到DelegateAllLinks
。
現在,當做類似python example.py http://www.stackoverflow.com/
的事情,並點擊一個鏈接,它會打印到標準輸出並不打開,就像它應該。
但是,當通過python example.py http://www.duckduckgo.com/?q=foo
進行同樣的操作並點擊其中一個結果時,結果會被簡單加載而不會得到linkClicked
信號。
我的猜測是他們以某種方式通過Javascript動態加載打開的頁面。
是否仍然有辦法強制這個功能在新標籤中打開,儘管沒有得到信號?
可能重複[QWebView自動選項卡](http://stackoverflow.com/questions/4766186/qwebview-auto-tabs) – M4rtini
@ M4rtini在這個問題中,提問者不知道「linkClicked」。我的問題是 - 如我的示例所示 - linkClicked'不應該發射時,它應該。這是兩件完全不同的事情。 (雖然我的最後一句話提到了「新標籤」,因爲這是我的用例,但我會澄清這一點) –