QWebView не загружает внешние ресурсы, если он загружает html-файл из qresources
как описано в заголовке моя проблема заключается в том, что qwebview не загружает html-файл правильно, если он находится в моих ресурсах. Он загружает его отлично, если я загружаю его из-за пределов ресурсов как обычный локальный файл. Но это не вариант для меня. Я хотел бы связать файл с приложением.
EDIT: кстати, я говорю о внешних ресурсах из интернета. (например,http://host.org/somejavascript.js) Спасибо за любую помощь
2 ответов
пожалуйста, взгляните на второй параметрvoid QWebView::setHtml ( const QString & html, const QUrl & baseUrl = QUrl() )
Согласно документация:
внешние объекты, такие как таблицы стилей или изображения, на которые ссылается HTML документ относительно автоопределения.
Ниже приведен код, который работает для меня.
#include <QtCore/QFile>
#include <QtCore/QUrl>
#include <QtGui/QApplication>
#include <QtGui/QMainWindow>
#include <QtWebKit/QWebView>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QMainWindow window;
QWebView webview(&window);
QFile source(":/google.com.html");
source.open(QIODevice::ReadOnly);
webview.setHtml(QString::fromUtf8(source.readAll().constData()), QUrl("http://google.com"));
window.setCentralWidget(&webview);
window.show();
return app.exec();
}
внешние URL-адреса должны иметь схему, чтобы сделать их внешними, иначе "external.org/script.js "ищет" сценарий.js " под "external.org /" под-путь", http://external.org/script.js " является абсолютным URL.
Edit:
Скажем, у вас есть этот HTML-файл в качестве ресурса": / file.html " и это coppied от "http://example.com/":
<html>
<head>
<title>My HTML</title>
<script type="text/javascript" src="/code.js"></scipt>
</head>
<body>
<img href="/image.jpg" />
</body>
</html>
затем, чтобы отобразить это правильно, вам нужно будет сделать следующее:
QFile res(":/file.html");
res.open(QIODevice::ReadOnly|QIODevice::Text);
my_webview.setHtml(res.readAll(), QUrl("http://example.com/");
таким образом, WebKit знает, где чтобы получить " код.ОАО" и "изображения.jpg " от. Используя QWebView::load()
не будет работать, так как корневой URL-адрес будет некоторым внутренним URL-адресом, начинающимся с qrc://, и WebKit будет искать "код.ОАО" и "изображения.jpg " в ваших ресурсах приложений. В принципе, вы можете использовать load()
когда все относительные URL-адреса в документе поступают из того же места, на которое указывает URL-адрес. И если вы использовали load(QUrl("qrc:///file.html"));
В приведенном выше случае URL (qrc:///file.html
) указывает на вашу систему ресурсов.
если вы хотите также включите свои ресурсы в HTML, вы можете использовать URL-адреса qrc:// в HTML-файле.