如果 QWebView 从 qresources 加载 html 文件,则不会加载任何外部资源
正如标题中所述,我的问题是 qwebview 无法正确加载位于我的资源中的 html 文件。如果我从资源外部将其作为普通本地文件加载,它会完美加载它。但这对我来说不是一个选择。我想将该文件与应用程序捆绑在一起。
编辑:顺便说一句,我正在谈论来自网络的外部资源。 (例如 http://host.org/somejavascript.js) 感谢您的帮助
As described in the title my problem is that qwebview doesn't load a html file correctly if it resides in my resources. It loads it perfectly if I load it from outside of the resources as normal local file. But this is not an option for me. I would like to bundle the file with the application.
EDIT: By the way, I'm talkin' about external resources from the web. (e.g. http://host.org/somejavascript.js)
Thanks for any help
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
请看一下
的第二个参数
void QWebView::setHtml ( const QString & html, const QUrl & baseUrl = QUrl() )
根据文档:
下面是适合我的代码。
Please take a look at the second parameter of
void QWebView::setHtml ( const QString & html, const QUrl & baseUrl = QUrl() )
According to documentation:
Below is code that works for me.
外部 URL 必须有一个架构才能使其成为外部 URL,否则“external.org/script.js”会在“external.org/”子路径、“http://external.org/script”下查找“script.js” .js”是绝对 URL。
编辑:
假设您有这个 HTML 文件作为资源“:/file.html”,并且它是从“http://example.com/”复制的:
然后要正确显示此文件,您需要执行以下操作:
这样,WebKit 就知道从哪里获取“code.js”和“image.jpg”。使用
QWebView::load()
将不起作用,因为根 URL 将是一些内部 URL,即以 qrc:// 开头的 URL,WebKit 将查找“code.js”和“image” .jpg”在您的应用程序资源中。基本上,只有当文档中的所有相对 URL 都来自 URL 所指向的同一位置时,才能使用load()
。如果您在上述情况下使用了load(QUrl("qrc:///file.html"));
,则 URL (qrc:///file.html
) 指向您的资源系统。如果您还想将资源包含在 HTML 中,则可以在 HTML 文件中使用 qrc:// URL。
External URLs must have a schema to make them external, otherwise "external.org/script.js" looks for "script.js" under the "external.org/" sub-path, "http://external.org/script.js" is an absolute URL.
Edit:
Say you have this HTML file as the resource ":/file.html" and it is coppied from "http://example.com/":
Then to display this correctly you would need to do the following:
That way, WebKit knows where to fetch "code.js" and "image.jpg" from. Using
QWebView::load()
will not work, as the root URL will be some internal URL, the one starting with qrc://, and WebKit will look for "code.js" and "image.jpg" in your applications resources. Basically, you can only useload()
when all the relative URLs in the document come from the same place as the URL is pointing to. And if you usedload(QUrl("qrc:///file.html"));
in the case above, the URL (qrc:///file.html
) is pointing to your resource system.If you want to also include your resources in the HTML, you can use the qrc:// URLs in the HTML file.