Qt:addToJavaScriptWindowObject并切换QWebView内容

时间:2015-11-17 10:36:40

标签: c++ qt qwebview

我正在使用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方法吗?

1 个答案:

答案 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 );
}