Qt : addToJavaScriptWindowObject 和切换 QWebView 内容

Qt : addToJavaScriptWindowObject and switch QWebView content

本文关键字:QWebView 内容 addToJavaScriptWindowObject Qt      更新时间:2023-10-16

我正在使用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不适用于页面。我必须制作一个新的网络视图才能使其正常工作。我的问题是,这是一种在 html 页面之间切换并使其在每个新页面上使用addToJavaScriptWindowObject方法的干净方法吗?

如果您希望该方法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 );
}