QtWebKit: можно ли получать события для файлов, загружаемых веб-страницей?

У меня есть некоторые трудности с этим, но в основном загружаю страницу в QWebView, возможно ли получать события для контента, который загружается в процессе рендеринга страницы?

Я использую PySide, поэтому, если у вас уже есть QWebView как 'w'

w.load('http://www.unicorns-are-awesome.com/index.html')

И содержимое этого index.html выглядит так:

<html>
    ...
    <head> 
         <script src="something.js">
    </head>
    <body>
         <img src="unicorns.jpg">
    </body>
</html>

QWebView должен загрузить как something.js, так и unicorns.jpg, но до сих пор не существует очевидного способа получить события downloadRequest для этих подчиненных загрузок.

Единственный раз, когда w.page() выдает «downloadRequest», это когда вы меняете URL-адрес в QtWebView, то есть вы получаете обновления только для того, что будет на панели «Расположение».

Как вы можете получать уведомления о каждом элементе, загружаемом веб-страницей в ваш QtWebView?

Обновление: реализация NetworkAccessManager:

from MainWindow import MainWindow
from PySide.QtGui import QApplication
from PySide.QtCore import QCoreApplication
from PySide.QtWebKit import QWebView, QWebSettings
from PySide.QtNetwork import QNetworkReply

class TransferMonitor(object):

    def __init__(self):
        a = MainWindow._instance # "singleton"
        b = a.findChild(QWebView, "browser")
        nm = b.page().networkAccessManager()
        nm.finished[QNetworkReply].connect( self.dump_url )

    def dump_url(self, reply):
        # This is probably unnecessary, but
        # I wanted to be 100% sure that every get
        # was 'fresh'. 

        QWebSettings.clearMemoryCaches()

        # For now all we really do is just dump URLs 
        # as they're processed. Perhaps later we will intercept.

        print reply.url().toString()

person synthesizerpatel    schedule 17.01.2012    source источник
comment
Что именно вы хотите сделать? Реализовать индикатор выполнения?   -  person Mhh Lecker    schedule 17.01.2012
comment
@Mhh Лекер - обновлен вопрос, чтобы отразить цель.   -  person synthesizerpatel    schedule 17.01.2012


Ответы (1)


Вам нужно будет реализовать QNetworkAccessManager, переопределить createRequest() и вызвать QWebPage::setNetworkAccessManager(). Я не уверен, что это возможно в PySide.

person Dan Milburn    schedule 18.01.2012