【问题标题】:Qt : addToJavaScriptWindowObject and switch QWebView contentQt : addToJavaScriptWindowObject 并切换 QWebView 内容
【发布时间】:2016-03-21 21:57:53
【问题描述】:

我使用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 方法一起使用的干净方式?

【问题讨论】:

    标签: c++ qt qwebview


    【解决方案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 );
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-05
      • 2019-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多