Внешние URL-адреса должны иметь схему, чтобы сделать их внешними, в противном случае «external.org/script.js» ищет «script.js» в подпутере «external.org/», http://external.org/script.js" является абсолютным URL.
Edit:
Скажем, у вас есть этот HTML-файл в качестве ресурса ": /file.html", и он скопирован из "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 знает, откуда можно извлечь «code.js» и «image.jpg». Использование QWebView::load()
не будет работать, так как корневым URL будет некоторый внутренний URL, начинающийся с qrc: //, а WebKit будет искать «code.js» и «image.jpg» в ресурсах ваших приложений. По сути, вы можете использовать load()
, только когда все относительные URL-адреса в документе происходят из того же места, на которое указывает URL-адрес. И если вы использовали load(QUrl("qrc:///file.html"));
в приведенном выше случае, URL (qrc:///file.html
) указывает на вашу систему ресурсов.
Если вы также хотите включить свои ресурсы в HTML, вы можете использовать URL-адреса qrc: // в файле HTML.