我正在使用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页面但仍保持登录状态?