使用持久性预加载javascript?

使用持久性预加载javascript?,javascript,node.js,electron,Javascript,Node.js,Electron,我正在尝试用我的electron应用程序实现一些自动化,作为我公司传统应用程序替代方案的概念证明。我知道我们不能从主窗口与DOM进行真正的交互,所以我想看看我可以采取什么方法 我创建了一个preload.js文件,该文件正在注入窗口中。这个预加载文件本质上使用一个IPC渲染器来监听,然后当被触发时,它将数据发送回父级 这很好,我可以将数据从main.js发送到流程渲染器,它会将数据返回给我 // main.js mainWindow = new BrowserWindow({ width

我正在尝试用我的electron应用程序实现一些自动化,作为我公司传统应用程序替代方案的概念证明。我知道我们不能从主窗口与DOM进行真正的交互,所以我想看看我可以采取什么方法

我创建了一个
preload.js
文件,该文件正在注入窗口中。这个预加载文件本质上使用一个
IPC渲染器
来监听,然后当被触发时,它将数据发送回父级

这很好,我可以将数据从main.js发送到流程渲染器,它会将数据返回给我

// main.js
mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
        nodeIntegration: true,
        preload: path.join(__dirname, 'preload.js')
    }
})

mainWindow.loadURL('http://example.com');

// Listen for data from child
ipcMain.on('data-from-child', function (event, data) {
    console.log('From target', data)
});

// Send 
function sendData() {
    mainWindow.webContents.send('on-parent-recv', null);
}

// Send
sendData();
--

我面临的问题是,当用户在我们创建的窗口中单击example.com上的另一个链接时,我认为这种注入是重新注入的?因此失去了范围。作为测试,我创建了一个间隔,然后导航到另一个页面。当我拿回数据时,它又回到了
0

我的问题

是否有一种方法可以将文件预加载到窗口本身,而不是每次刷新或重新加载到页面中

例如,如果我使用
webview
,渲染器进程将永远不会更改,javascript文件将保留在那里,而
webview
将更改,从而允许我保留范围/状态


我在这里要做的就是在
浏览器窗口
中自动加载我正在加载的网站,这被证明是很困难的。我无法使用
DreammareJS
,因为该网站使用NTLM发送凭据,我认为该库不支持此功能。

这:对于我公司的旧版应用程序替换,非常好奇旧版应用程序如何完成此任务。@RandyCasburn-它使用IE ActiveX对象实现所有自动化。这允许我们让
example.js
创建一个名为
count=0
的变量,创建一个ActiveX对象,并在网站上执行一些自动化操作,然后更新
count++。由于我们的主进程没有访问DOM的权限,所以更难处理电子。这就是我尝试注入有效负载的地方,这样我就可以尝试对我正在使用的网站进行某种类型的“控制”。所以,是的,非常传统,我想摆脱它。Webview听起来确实是一个有效的解决方法,它可以简单地将事件嗅探器与计数范围解耦。。。您可以将计数移动到主进程,同时将事件嗅探器保留在渲染器中,只发送ping而不是计数。@ghybs我同意这可能会很好,但我不知道需要多长时间。听起来它可能在不久的将来被移除?“电子的WebVIEW标签是基于Cr的WebVIEW,它正在经历戏剧性的架构改变。这影响了WebVIEW的稳定性,包括渲染、导航和事件路由。我们目前建议不要使用WebVIEW标签,并考虑替代方案,如iFrAME、电子的BuffSerVIEW或避免E的架构。我理解你不愿意使用webview,那么为什么不先用主渲染器实现同样的效果呢?它的设置几乎完全相同。
// preload.js
var ipcRenderer = require('electron').ipcRenderer;
count = 0;

// Once we get something from the parent, send data back and then increment our counter
ipcRenderer.on('on-parent-recv', function (event, data) {
    ipcRenderer.send('data-from-child', { value: 'hello', count: count });
    count++;
});