簡體   English   中英

如果從qresources加載html文件,QWebView不會加載任何外部資源

[英]QWebView doesn't load any external resources if it loads a html-file from qresources

正如標題中所描述的,我的問題是qwebview如果它位於我的資源中,則不會正確加載html文件。 如果我從資源外部加載它作為普通的本地文件,它會完美地加載它。 但這對我來說不是一個選擇。 我想將文件與應用程序捆綁在一起。

編輯:順便說一下,我正在談論網絡上的外部資源。 (例如http://host.org/somejavascript.js )感謝您的幫助

請看一下第二個參數
void QWebView::setHtml ( const QString & html, const QUrl & baseUrl = QUrl() )根據文檔

外部對象(如HTML文檔中引用的樣式表或圖像)相對於baseUrl定位。

以下是適合我的代碼。

#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必須有一個模式才能使它們成為外部URL,否則“external.org/script.js”會在“external.org/”子路徑下查找“script.js”,“http://external.org/script .js“是一個絕對的URL。

編輯:
假設您將此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” 。 基本上,只有當文檔中的所有相對URL來自與URL指向的相同位置時,才能使用load() 如果你使用了load(QUrl("qrc:///file.html")); 在上面的例子中,URL( qrc:///file.html )指向您的資源系統。

如果您還想在HTML中包含資源,可以使用HTML文件中的qrc:// URL。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM