2010-10-06 8 views
1

J'ai une QWebView dans mon application qui rend une page html stockée dans l'application en tant que Qresource. Cette page, cependant, nécessite des bibliothèques Javascript externes charnues telles que MathJax, que je voudrais inclure en tant que ressource en raison de sa taille. Mon problème est qu'il semble que QtWebkit ne cache pas ces fichiers comme ferait un navigateur normal, et chaque fois que j'actualise le widget, il télécharge MathJax à nouveau. Donc, ma question est la suivante: est-il possible de mettre en cache ces bibliothèques après la première fois qu'elles sont téléchargées, sans avoir recours à l'envoyer avec l'application en tant que ressource?Mise en cache de javascript externe pour un widget QtWebkit dans une application PyQt

Répondre

1

Vous devriez essayer si un simple téléchargement basé sur QtNetwork respecte le paramètre de cache ou non. Vérifiez également si les paramètres (QWebSettings) sont correctement définis. Dans tous les cas, vous devriez être en mesure d'injecter un gestionnaire QNetworkAccessManager personnalisé qui gère la mise en cache de votre bibliothèque JS personnalisée. Voir http://ariya.blogspot.com/2010/05/qnetworkaccessmanager-tracenet-speed.html et http://ariya.blogspot.com/2010/06/proxy-server-with-filtering-feature.html comme exemples et suivre à partir de là.

0

Pourriez-vous poster un code source? Une fois téléchargées, ces données resteront dans le dossier/tmp/pendant un certain temps. Vous pourriez probablement utiliser les données dans le dossier temporaire, je suppose que vous n'appliquez pas cette politique.

+0

Eh bien, le code est aussi clair que possible, le widget est défini comme celui-ci :: self.modelWebView = QtWebKit.QWebView (self.scrollAreaWidgetContents_2) et il charge un document html qui charge certains js externes L'utilisation des données dans/tmp/peut ne pas être une bonne idée puisque sur d'autres plates-formes (par exemple, Windows) les données peuvent se retrouver ailleurs. – fccoelho

+0

désolé .. J'aurais dû dire le répertoire (temp), ou l'a dit d'une autre manière d'impliquer que je le voulais comme le dossier temporaire indépendamment du système d'exploitation. Parce que vous travaillez à partir de la classe de base, vous devrez redéfinir comment il fonctionne. Une façon de procéder consiste à transformer toutes vos pages Web en QWebElements avant d'y accéder. La première fois que vous chargez la page, vous pouvez extraire le script, l'enregistrer en tant qu'objet, puis réutiliser son contenu dans la mémoire, en insérant le script et l'emplacement local en tant qu'élément. –

+0

Je voulais ajouter un deuxième commentaire depuis que j'ai manqué de caractères. Le processus est assez simple et vous pouvez le faire comme vous le voulez. Vous téléchargez la source du script et créez un objet avec son contenu, puis l'utilisez localement. C'est ce que je suggérerais. –

Questions connexes