如何在不等待页面重新加载的情况下为BrowserView切换网站?

时间:2019-03-06 23:15:00

标签: javascript google-chrome browser electron

假设我在BrowserView中有一个BrowserWindow

browserWindow = new BrowserWindow({ width: 1200, height: 600 });
browserWindow.webContents.loadURL('file://' + __dirname + '/top_toolbar.html');

let browserView1 = new BrowserView({ webPreferences: { nodeIntegration: false }});
browserWindow.setBrowserView(browserView1);
browserView1.setBounds({ x: 0, y: 50, width: 600, height: 600 }); // y=50 to keep top toolbar
browserView1.webContents.loadURL('https://www.twitter.com');

当我单击UI按钮(另一个“标签”,例如在浏览器中)时,我想将URL更改为另一个网站(例如https://www.gmail.com)。

当我单击返回第一个“选项卡”时,我希望BrowserView恢复先前的网站(Twitter)及其所有浏览历史记录。显然,使用:

browserView1.webContents.loadURL('https://www.twitter.com');
再次

并不是一个好的解决方案,因为会有页面加载等待时间。

相反,我想立即恢复BrowserView 的先前状态(即<50毫秒),就像在Chrome或Firefox这样的浏览器中单击选项卡时一样:如果标签页中的网站之前已经加载过,则只需点击标签页即可重新显示该网站。

问题:如何存储并立即恢复BrowserView状态?,即无需重新加载页面?

enter image description here

2 个答案:

答案 0 :(得分:0)

请尝试单击按钮:

 onClick(){
        const shell = require('electron').shell;
        event.preventDefault();
        shell.openExternal('https://www.twitter.com');
      }

答案 1 :(得分:0)

解决方案是拥有多个BrowserView并在它们之间切换。这样,每个人都会记住其历史。

var browserViews = [];
var activeBW;

function addAndSwitchToTab() {
  activeBW = browserViews.length;
  browserViews[activeBW] = new BrowserView();
  browserWindow.setBrowserView(activeBW);
}

从第一个开始:

addAndSwitchToTab();

当用户打开一个新标签时,只需再次调用该函数即可。