QWebView not loading external javascript?

馋奶兔 提交于 2019-12-01 09:52:09

问题


It is possible to load an external javascript file from the html using QWebView?

In the following QtProject (all files in the same directory) there is javascript code directly inside the html and also in an external file. I'm missing the external behavior while loading it in QWebView (in the browser it works fine):

MyApp.pro

QT       += core gui webkitwidgets

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = MyApp
TEMPLATE = app
DESTDIR = ./

SOURCES += main.cpp

HEADERS  +=

main.cpp

#include <QApplication>
#include <QtWebKitWidgets>
#include <QFile>

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

    QWebView *view = new QWebView;
    view->show();

    QFile file("qt.html");

    if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
        return -1;

    QString html = QTextStream(&file).readAll();
    view->setHtml(html);

    return a.exec();
}

qt.html

<html>

<head>
  <script type="text/javascript" src="qt.js">
  </script>
</head>

<body onload="hello()">

Test..


<script>
    alert("Hello World INTERNAL!");
</script>

</body>
</html> 

qt.js

function hello() {
    alert("Hello World EXTERNAL!");
}

回答1:


Alternatively 1:

It seems the javascript isn't evaluated from the html. In other words, the following has no effect:

<script type="text/javascript" src="qt.js">
</script>

It must be done explicitly:

QString js = readFile("qt.js");
view->page()->mainFrame()->evaluateJavaScript(js);

And, there is no need to set baseUrl in setHtml().

Alternatively 2:

Use the QRC System and set the baseUrl in setHtml. This way doesn't require a call to view->page()->mainFrame()->evaluateJavaScript();

//    QString js = readFile(":/qt.js");
//    view->page()->mainFrame()->evaluateJavaScript(js);

    QString html = readFile(":/qt.html");
    view->setHtml(html, QUrl("qrc:/"));

application.qrc

<!DOCTYPE RCC><RCC version="1.0">
<qresource>
    <file alias="qt.png">resource/qt.png</file>
    <file alias="image.html">resource/image.html</file>
    <file alias="qt.html">resource/qt.html</file>
    <file alias="qt.js">resource/qt.js</file>
</qresource>
</RCC>



回答2:


Actually you can. You just need to add file:// at the begining of your src.

file:///home/js/somejs.js



回答3:


If you want to load a local html file, first you need to change the src attribute of the javascript, for example:

then src is changed to src="'file:///D:/home/myWeb/js/myjs.js'"

this will work. Relative path can also be given.



来源:https://stackoverflow.com/questions/34184704/qwebview-not-loading-external-javascript

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!