6

タイトルで説明したように、私の問題は、リソースにある場合、qwebview が html ファイルを正しくロードしないことです。リソースの外部から通常のローカルファイルとしてロードすると、完全にロードされます。しかし、これは私にとって選択肢ではありません。ファイルをアプリケーションにバンドルしたいと考えています。

編集: ところで、私はウェブからの外部リソースについて話しています。(例http://host.org/somejavascript.js)助けてくれてありがとう

4

2 に答える 2

5

ドキュメント
void QWebView::setHtml ( const QString & html, const QUrl & baseUrl = QUrl() )に よるとの2番目のパラメータを見てください:

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();
}
于 2011-02-26T13:15:53.433 に答える
2

外部 URL には、それらを外部にするためのスキーマが必要です。それ以外の場合、「external.org/script.js」は「external.org/」サブパス、「http://external.org/script」の下で「script.js」を探します。 .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 は qrc:// で始まる内部 URL になり、WebKit はアプリケーション リソースで「code.js」と「image.jpg」を検索するため、使用は機能しません。load()基本的に、ドキュメント内のすべての相対 URL が、URL が指しているのと同じ場所から来ている場合にのみ使用できます。上記の場合load(QUrl("qrc:///file.html"));、URL ( qrc:///file.html) はリソース システムを指しています。

リソースも HTML に含めたい場合は、HTML ファイルで qrc:// URL を使用できます。

于 2011-02-26T15:43:49.673 に答える