【发布时间】:2019-07-05 09:18:11
【问题描述】:
使用带有 QWebEngineView 的 googlemap,我想在 html 文件中添加 myscript.js。它在调试中工作得很好,但在发布时却不行。在发布模式下,找不到 myscript.js 并出现错误 js: Uncaught (in promise) ReferenceError: myscriptNameSpace is not defined
我正在使用 Qt 5.12.2,MSVC 2017
我的 qrc 文件
<RCC>
<qresource prefix="/">
<file>html/googlemap.html</file>
<file>js/myscript.js</file>
</qresource>
</RCC>
我的 .h 文件
class GoogleMapWebEngine : public QWidget
{
Q_OBJECT
public:
explicit GoogleMapWebEngine(QWidget *parent = nullptr);
virtual ~GoogleMapWebEngine() override;
protected:
virtual void wheelEvent(QWheelEvent * event) override;
private:
Ui::GoogleMapWebEngine *ui;
QWebEngineView* m_webview;
QWebChannel* m_webChannel;
};
我的 .cpp 文件
GoogleMapWebEngine::GoogleMapWebEngine(QWidget *parent) :
QWidget(parent),
ui(new Ui::GoogleMapWebEngine)
{
qputenv("QTWEBENGINE_REMOTE_DEBUGGING", "1234");
ui->setupUi(this);
m_webview = new QWebEngineView();
m_webChannel = new QWebChannel();
m_webChannel->registerObject("goolemainWindow", this);
m_webview->page()->setWebChannel(m_webChannel);
QUrl url = QUrl("qrc:/html/googlemap.html");
m_webview->setUrl(url);
ui->verticalLayout->addWidget(m_webview);
}
我的 googlemap.html 文件
<html>
<head>
...
<script src="qrc:/js/myscript.js"></script>
<script type="text/javascript">
function initMap()
{
var
mapCenter = [32.794488, -96.780372],
mapOptions = {
zoom: 18,
center: new google.maps.LatLng(mapCenter[0], mapCenter[1]),
mapTypeId: google.maps.MapTypeId.SATELLITE
},
map = new google.maps.Map(document.getElementById("map-canvas"), mapOptions);
myscriptNameSpace.test();
}
</script>
</head>
<body ondragstart="return false">
<div id="map-canvas" />
<script async defer src="https://maps.googleapis.com/maps/api/js?key=myKey&callback=initMap"></script>
</body>
</html>
myscript.js
var myscriptNameSpace = {}
myscriptNameSpace.test = function(){
alert('test');
}
预期:必须显示警报消息
当前错误:js: Uncaught (in promise) ReferenceError: myscriptNameSpace is not defined
我的完整源代码在这里:github.com/hunglxtp/googlemapTest
【问题讨论】:
-
你确定qt真的在页面中加载了“myscript.js”吗?似乎它在您的“myscript.js”中不起作用“myscriptNameSpace”和“.test”之间实际上有一个空格,或者它是一个错字?
-
是的,在调试中,它运行良好。但在发布时,我怀疑它是否已加载,但我不知道为什么。该空间只是页面上的编辑错误。我编辑了问题并删除了空格
-
不幸的是,我从未使用过 qt,但我投了赞成票,祝你好运!
-
谢谢玛贡。
-
@LEXuanHung:我无法构建您的示例。缺少头文件。我没有
Ui::GoogleMapWebEngine。请创建一个可重现的最小示例。
标签: javascript qt release referenceerror qwebengineview