3

編集:これは重複ではありません。リンクされた質問は、ブラウザーがさまざまなソースからスクリプトをロードできない CORS セキュリティ質問を処理します。私の質問は、基本的なリソース読み込みスキーム (file:///vsqrc:/) に関連しています。

スキームを使用して QWebEngineView にローカルの html ドキュメントをロードしようとしていますfile:///。html ファイルは、ローカルに保存されている jquery ライブラリも参照します。ページをロードするためのコードは次のとおりです。

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    MainWindow w;

    // center window on desktop
    w.setGeometry(QStyle::alignedRect(
                      Qt::LeftToRight,
                      Qt::AlignCenter,
                      w.size(),
                      a.desktop()->availableGeometry()
                      ));

    // Add WebEngineView
    QWebEngineView* view = new QWebEngineView;
    QWebEngineSettings* settings = view->settings();
    settings->setAttribute(QWebEngineSettings::LocalContentCanAccessFileUrls, true);
    settings->setAttribute(QWebEngineSettings::LocalContentCanAccessRemoteUrls,true);

    view->setUrl(QUrl(QStringLiteral("file:///app/ui/main.html")));

    // Make it the one and only widget
    w.setCentralWidget(view);

    w.show();

    return a.exec();
}

そして、次の最小限の html ドキュメント:

<html>
<head>
<script src="libs/jquery-3.2.1.min.js"/>
</head>
<body>
<h2>Hello World</h2>
<script>
$(function() {
  alert('loaded');
});
</script>
</body>
</html>

ドキュメントは正常に読み込まれますが、JavaScript は次のエラーで失敗します。

js: Not allowed to load local resource

とにかくQWebEngineViewにスクリプトをロードして実行させるにはどうすればよいですか?

編集: @eyllanesc の提案に従って進め、すべてのファイルを qrc リソースとして追加しました。これは今では完全にうまく機能します。

更新されたソース コードは次のとおりです (C++ コードと HTML コードの両方で qrc リソースへの参照に注意してください)。

#include "mainwindow.h"
#include <QApplication>
#include <QWebEngineView>
#include <QStyle>
#include <QDesktopWidget>
#include <QWebEngineSettings>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    MainWindow w;

    // center window on desktop
    w.setGeometry(QStyle::alignedRect(
                      Qt::LeftToRight,
                      Qt::AlignCenter,
                      w.size(),
                      a.desktop()->availableGeometry()
                      ));

    // Add WebEngineView
    QWebEngineView* view = new QWebEngineView;
    QWebEngineSettings* settings = view->settings();

    //settings->setAttribute(QWebEngineSettings::LocalContentCanAccessFileUrls, true);
    //settings->setAttribute(QWebEngineSettings::LocalContentCanAccessRemoteUrls,true);

    view->setUrl(QUrl("qrc:/ui/main.html"));

    // Make it the one and only widget
    w.setCentralWidget(view);

    w.show();

    return a.exec();
}

対応する html ファイル:

<html>
<head>
  <script src="qrc:/ui/libs/jquery-3.2.1.min.js"></script>
</head>
<body>
<h2>Hello World</h2>
<script>
$(function() {
    alert( "Document ready!" );
});
</script>
</body>
</html>
4

2 に答える 2