QWebView not loading external javascript?
是否可以使用qwebview从HTML加载外部javascript文件?
在下面的qtproject(同一目录中的所有文件)中,HTML和外部文件中都有javascript代码。在QWebView中加载外部行为时,我缺少外部行为(在浏览器中,它工作正常):
我的应用程序.pro
1 2 3 4 5 6 7 8 9 10 11 | QT += core gui webkitwidgets greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET = MyApp TEMPLATE = app DESTDIR = ./ SOURCES += main.cpp HEADERS += |
主.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #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文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <html> <head> <script type="text/javascript" src="qt.js"> </head> <body onloadx="hello()"> Test.. alert("Hello World INTERNAL!"); </body> </html> |
QT.JS
1 2 3 | function hello() { alert("Hello World EXTERNAL!"); } |
。
或者1:
似乎JavaScript不是从HTML计算出来的。换言之,以下内容无效:
1 | <script type="text/javascript" src="qt.js"> |
必须明确:
1 2 | QString js = readFile("qt.js"); view->page()->mainFrame()->evaluateJavaScript(js); |
号
在
或者2:
使用QRC系统,在
1 2 3 4 5 | // QString js = readFile(":/qt.js"); // view->page()->mainFrame()->evaluateJavaScript(js); QString html = readFile(":/qt.html"); view->setHtml(html, QUrl("qrc:/")); |
应用程序.qrc
1 2 3 4 5 6 7 8 | <!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> |
。
如果要加载本地HTML文件,首先需要更改javascript的src属性,例如:
然后将src改为src="'file:///d:/home/myweb/js/myjs.js'"
这是可行的。也可以给出相对路径。
实际上你可以。您只需要在SRC的开头添加文件:/。
1 | file:///home/js/somejs.js |