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

У меня есть некоторые трудности с этим, но в основном загрузка страницы в 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 должен загрузить оба thing.js и unicorns.jpg - но пока не существует очевидного способа получения событий downloadRequest для этих подчиненных загрузок.

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

Как вы можете получать уведомления для каждый элемент, который веб-страница загружает в ваш 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()

1 Ответ

1 голос
/ 18 января 2012

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

...