例如,下面是一个简单的BrowserWindow
,它具有适当的安全设置,但webviewTag: true
是本项目所必需的。
let webPrefs = {
plugins: false,
nodeIntegration: false,
nodeIntegrationInWorker: false,
webviewTag: true,
sandbox: true,
enableRemoteModule: false,
contextIsolation: true,
disableBlinkFeatures: "Auxclick",
webSecurity: true
};
let winOpts = {
...
show: true,
webPreferences: webPrefs
};
...
win = new BrowserWindow(winOpts);
const view = new BrowserView(winOpts);
win.setBrowserView(view);
...
view.webContents.loadURL("https://example.com").then(result => {
....
});
假设example.com
网站包含<form>
和几个<input>
字段。
用户将在这些<input>
字段中键入文本。
我想从这些<input>
字段中提取“手动填充”的文本。该网页不是我的,因此不能修改网站。webContents.executeJavaScript()
可以作为一个起点,但无法找到如何将值本身“提取”到main
进程中。
(主进程中的表单填写可以通过上面的功能完成。)
我如何才能做到这一点?
1条答案
按热度按时间44u64gxh1#
在main中,像这样从
electron
导入ipcMain
在
webPrefs
中添加预加载文件。例如创建一个新的preload文件并命名为“preload.js”。当然,你可以命名它,只要确保在上面的
preload
中设置了正确的文件名。这个文件就像一个桥梁之间的webview和主进程。预加载脚本在渲染器进程被加载之前运行,并且可以访问渲染器全局变量(例如窗口和文档)和Node.js环境。
将以下代码放入
preload.js
文件中现在回到你的主文件,例如你可以添加
你需要的所有代码。现在再做一些解释。
preload文件在webview内容之前被加载,并且可以运行任何你想要的东西。它也可以访问节点的东西。我们所做的是使用IPC在preload和main之间进行通信。我们在preload中添加了一个全局监听器,它列出了所有输入事件。然后他检查并且如果ID与
dom_element_id
匹配,则其将DOM元素值发送到main。主获取事件数据在INPUT_OCCURED
他上市我之所以添加一个全局侦听器而不是获取元素并将侦听器添加到他,只是为了简化示例。