在电子BrowserWindow中重新加载页面,但保持会话状态

时间:2019-04-05 15:10:03

标签: javascript electron

我正在使用Electron登录到第三方Web应用程序,以使用Javascript在此处执行操作。

使用

loadURL('https://webapp/#!/login');

我导航到webapps登录表单,提交表单,然后登录。但是,当我想重新使用loadURL('https://webapp/otherpath');reload()重新加载页面时,由于Electron不能使会话或cookie保持活动状态,因此我又被重定向到登录页面。

这是我的代码:

Main.mainWindow = new Main.BrowserWindow({
            show: true,
            resizable: true,
            webPreferences: {
                nodeIntegration: false,
                webviewTag: false,
                nativeWindowOpen: true,
                webSecurity: false,
                preload: path.join(__dirname, 'inject.js'),
                partition: 'persist:filestage',
                contextIsolation: false,
                enableRemoteModule: true,
}
});

Main.mainWindow.focus();
Main.mainWindow.maximize();
Main.mainWindow.webContents.openDevTools();
Main.mainWindow.loadURL(uri); //uri is startpage (not login page)

inject.js中,我注入了应处理浏览器端内容的javascript(即,首先登录页面,然后将按钮添加到DOM,在所述按钮上添加点击处理程序,处理点击等) 。pp)

.getWinContents().loadURL('https://webapp/#!/login');
.getWinContents().on('dom-ready', function () {
            // promises with callback specified
            me.win.getWinContents().executeJavaScript(` function login() {

                $( "input[name='email']" ).val("xxx").trigger('change')
                $( "input[name='password']" ).val("xxx").trigger('change')
                $( "button[type='submit']" ).click()

            }
            login() `).then((ans: any) => {
                me.loggedIn = true;
                //me.getAllProjects();
                me.addExportButtonOnHashChange();
            });
        });

addExportButton函数将如下所示

private addExportButtonOnHashChange() {
        if (this.loggedIn) {
            let me = this;

            this.win.getWinContents().on('did-navigate-in-page', function () {
                me.win.getWinContents().executeJavaScript(`

function delay() {
    return new Promise(function (resolve, reject) {
    let match = window.location.href.match(/^[^#]+#([^?]*)\\??(.*)/);
        if (match[1]) {
            let expl = match[1].split("/");
            if(expl[2]) {
                $(function() {
                    resolve(expl[2]);
                });
            }
        }
    });
}

delay()
    .then(function (v) {
        return (v);
    });

`)
                    .then((ans: any) => {
                        if (ans !== null) {
                            if (ans) {
                                me.onProjectPage();
                            }
                        }
                    });
            });
        }
    }

在该网站的特殊部分添加了一个按钮,onProjectPage应该重新加载页面以每次执行JS。 (否则变量已经声明并且带来了)

(我正在使用TypeScript,它会编译为“ commonjs”,以防您想知道此处的一些摘要)

现在的问题是: 如何重新加载BrowserWindow页面但仍保持登录状态?

0 个答案:

没有答案