Qt: addToJavaScriptWindowObject и переключить содержимое 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 не применяется на странице. Мне нужно сделать новый веб-просмотр, чтобы он работал. Мой вопрос был в том, что это чистый способ переключения между html-страницами и заставить его работать с методом addToJavaScriptWindowObject на каждой новой странице?


person Robin    schedule 17.11.2015    source источник


Ответы (1)


Вы должны подключить свою страницу к такому слоту, если хотите, чтобы метод 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 );
}
person IAmInPLS    schedule 21.03.2016