QTwebKit: Est-il possible d'obtenir des événements pour des fichiers téléchargés par une page Web?

StackOverflow https://stackoverflow.com/questions/8896533

Question

J'ai des difficultés avec cela, mais chargez essentiellement une page dans un QWebView, est-il possible d'obtenir des événements sur le contenu qui est chargé dans le processus de rendu de la page?

J'utilise un pyside, alors supposant que vous avez déjà un QWebView comme 'w'

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

et le contenu de cet index.html ressemble à:

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

Le QWebView doit télécharger les deux quelque chose.js et Unicorns.jpg - mais là-bas ne semble pas être un moyen évident d'obtenir des événements de téléchargement de DownloadReQuest pour ces subordonnésTéléchargements.

La seule fois que "DownloadQuest" est émis par W.Page () est lorsque vous modifiez l'URL dans le QTwebView, c'est-à-dire que vous obtenez uniquement des mises à jour de ce qui serait dans la barre "Emplacement".

Comment pouvez-vous vous être averti pour chaque élément d'une page Web Téléchargements dans votre QTwebView?

Mise à jour: NetworkAccessManager Mise en œuvre:
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()

Était-ce utile?

La solution

Vous auriez besoin de mettre en place un QNetworkAccessManager, remplacer CreekeQuest () et appelez QWebPage :: SenetworkAccessmanager ().Je ne sais pas si cela est possible dans Pyside.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top