2010-10-06 2 views
1

У меня есть QWebView в моем приложении, которое отображает html-страницу, хранящуюся в приложении, как Qresource. Однако на этой странице нужны мясистые внешние библиотеки Javascript, такие как MathJax, которые я бы хотел включить в качестве ресурса из-за его размера.Кэширование внешнего javascript для виджета QtWebkit в приложении PyQt

Моя проблема заключается в том, что QtWebkit не кэширует эти файлы, как это делает обычный браузер, и каждый раз, когда я обновляю виджет, он загружает MathJax заново.

Итак, мой вопрос: есть ли способ кэшировать эти библиотеки после первого раза их загрузки, не прибегая к отправке его с помощью приложения в качестве ресурса?

ответ

1

Вы должны попробовать, если простая загрузка на основе QtNetwork соответствует настройке кеша или нет. Также проверьте, установлены ли настройки (QWebSettings).

Во всех случаях вы должны иметь возможность вводить пользовательский QNetworkAccessManager, который обрабатывает кэширование вашей пользовательской библиотеки JS. См. Примеры http://ariya.blogspot.com/2010/05/qnetworkaccessmanager-tracenet-speed.html и http://ariya.blogspot.com/2010/06/proxy-server-with-filtering-feature.html и следуйте за ним.

0

Не могли бы вы опубликовать некоторый исходный код? После загрузки эти данные будут оставаться в папке/tmp/в течение некоторого времени. Вероятно, вы можете использовать данные в папке temp, я полагаю, вы не применяете эту политику.

+0

Ну код ясно, как это может быть, виджет определяется как это :: self.modelWebView = QtWebKit.QWebView (self.scrollAreaWidgetContents_2) и загружает документ HTML, который загружает некоторые внешние JS Использование данных в/tmp/не может быть хорошей идеей, поскольку на других платформах (например, в окнах) данные могут оказаться в другом месте. – fccoelho

+0

извините .. Я должен был указать каталог (temp) или сказать, что это другой способ подразумевать, что я имел в виду это временную папку независимо от ОС.

Поскольку вы работаете с базовым классом, вам нужно будет переопределить, как он работает. Один из способов сделать это - превратить все ваши веб-страницы в QWebElements перед тем, как перейти к ним. При первой загрузке страницы вы можете извлечь скрипт, сохранить его как объект, а затем повторно использовать его содержимое из памяти, вставив скрипт и локальное местоположение в качестве элемента. – 2010-10-09 03:07:46

+0

Я хотел добавить второй комментарий, так как у меня закончились символы. Процесс довольно прост, и вы можете сделать это, как хотите. Вы загружаете источник сценария и создаете объект с его содержимым, а затем используете его локально. Это то, что я хотел бы предложить. – 2010-10-09 03:09:06

Смежные вопросы