gpt4 book ai didi

c++ - Qt QWebEngineView 不允许加载本地资源

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:08:26 43 4
gpt4 key购买 nike

编辑:这不是重复的。链接的问题处理 CORS 安全问题,浏览器不允许您从不同来源加载脚本。我的问题与基本资源加载方案有关(file:/// vs qrc:/)。

我正在尝试使用 file:/// 方案在 QWebEngineView 中加载本地 html 文档。 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>

最佳答案

如果我们放置相对路径,这些将始终是相对于可执行文件的路由,因此有必要确保该路由存在。

我不认识一个简单的 .js 似乎很奇怪,因为很多我都没有问题地使用过,但我把静态(html、js、css 等)放在资源 .qrc 中,因为这将是可执行文件的一部分因此它的路线永远不会改变。

关于c++ - Qt QWebEngineView 不允许加载本地资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45909518/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com