我正在使用QWebView
来显示我的一些HTML内容。我使用多个html页面,我必须在它们之间切换并在其上应用addJavaScriptWindowObject
方法来加载我的C ++对象。
目前我正在使用此功能加载新的html页面:
Q_INVOKABLE bool myBridge::newView(QString page)
{
QString path("file:///C:/wamp/www/WLC_Borne/");
path += page;
_view->close();
_view = new WebView;
QObject::connect(_view, SIGNAL(mouseMoveEvent(QMouseEvent*)), _mediaPlayer, SLOT(stop()));
_view->page()->mainFrame()->addToJavaScriptWindowObject("bridge", this);
_view->load(QUrl(path));
_view->showFullScreen();
return (true);
}
问题在于我总是分配一个新的QWebView
,它会为每个新的进程内存使用添加5ko。
我创建一个新的QWebView
的原因是只做:
_view->page()->mainFrame()->addToJavaScriptWindowObject("bridge", this);
_view->load(QUrl(path));
_view->showFullScreen();
addToJavaScriptWindowObject
不适用于该页面。我必须创建一个新的webview才能使它工作。
我的问题是它是一种在html页面之间切换的简洁方法,并使其适用于每个新页面上的addToJavaScriptWindowObject
方法吗?
答案 0 :(得分:2)
如果您希望方法addToJavaScriptWindowObject
正常工作,则必须将您的页面连接到这样的插槽。像这样:
bool myBridge::newView( QString page )
{
_view->close();
_view = new WebView;
QObject::connect(_view, SIGNAL(mouseMoveEvent(QMouseEvent*)), _mediaPlayer, SLOT(stop()));
QObject::connect( _view->page()->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()), this, SLOT(addObject()));
_view->load(QUrl(path));
_view->showFullScreen();
}
void myBridge::addObject()
{
frame->addToJavaScriptWindowObject( QString("bridge"), this );
}