如何重置QML WebView

How to reset QML WebView?

本文关键字:WebView QML 何重置      更新时间:2023-10-16

外观。以下是最简单的代码:https://www.dropbox.com/s/ctdcgrk0eqgq3a3/webview_test.tar.gz

当你启动这个应用程序时,你会看到白色窗口。点击窗口,你会看到浏览器和推特。再次单击,浏览器将被隐藏并销毁。

所以,请登录推特,然后点击第一个窗口销毁浏览器,然后点击第二个窗口重新创建。你会看到你离开了登录状态。但每次在没有签名用户的情况下打开浏览器时,我都需要该浏览器(即使用户选中了"记住我"复选框(。如何做到这一点?如何将浏览器重置为初始状态?

以下是项目的主要部分:

main.cpp

#include <QApplication>
#include <QQuickView>
#include "container.h"
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Container c;
    c.start();
    return a.exec();
}

容器.cpp

#include "container.h"
#include <QDebug>
#include <QQuickItem>
#include <QQmlContext>
Container::Container(QObject *parent) :
    QObject(parent)
{
    mainFile = new QQuickView();
    browserExists = false;
}
Container::~Container()
{
    delete mainFile;
}
void Container::start()
{
    mainFile->setSource(QUrl("qrc:/main.qml"));
    connect(mainFile->rootObject(), SIGNAL(click()), this, SLOT(mainFileClicked()));
    mainFile->show();
}
void Container::mainFileClicked()
{
    if(!browserExists)
    {
        browser = new QQuickView();
        browser->setSource(QUrl("qrc:/browser.qml"));
        browser->rootContext()->setContextProperty("address", "http://twitter.com");
        browser->show();
        browserExists = true;
    }
    else
    {
        browser->hide();
        delete browser;
        browserExists = false;
    }
}

main.qml

import QtQuick 2.0
Rectangle {
    width: 320
    height: 240
    signal click();
    MouseArea {
        anchors.fill: parent
        onClicked:
        {
            click()
        }
    }
}

browser.qml

import QtQuick 2.0
import QtWebKit 3.0
import QtWebKit.experimental 1.0
Item {
    width: 640
    height: 480
    signal closeWindow();
    WebView
    {
        anchors.fill: parent
        url: address
        experimental.preferences.privateBrowsingEnabled: true
    }
}

我认为,现在这个答案是不必要的,但我在Sailfish应用程序中的嵌入式QML WebView也有同样的问题。私人浏览仍然不起作用,所以我发现了肮脏的黑客:从fs中删除缓存。在旗鱼中,它存储在~/.local/share/app-name/.QtWebKit中。因此,这种肮脏的解决方案使我有可能每次使用一个新状态的网络视图。