javascript - 在Electron BrowserView中访问DOM

标签 javascript dom electron

如何访问加载到BrowserView中的内容的DOM?
我有一个这样定义的BrowserWindowBrowserView(仅在我开始工作之前定义):

let win = null
let view = null

// Create the window  
win = new BrowserWindow({
 height: 600,
 width: 800
})

// HTML file to load into window
win.loadFile('main.html')

// Create main browserView
view = new BrowserView()

// Set BrowserView bounds (usually in a function to handle window resize)
wb = win.getBounds()
view.setBounds({ x: 0, y: 0, width: wb.width, height: wb.height })

// Set BrowserView in window
win.setBrowserView(view)

// Load url in BrowserView
view.webContents.loadURL(url)
main.html是样板:
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Testing</title>
  </head>
  <body>
    <script type="text/javascript" src="./renderer.js"></script>
  </body>
</html>
renderer.js也是如此:
const { ipcRenderer } = require('electron')
const $ = require('jquery')
我可以将输入发送到这样的 View (main.js):
view.webContents.sendInputEvent({type: 'keyDown', keyCode: 'space'})
我可以在这样的 View 中监听一般事件(main.js):
view.webContents.on('media-started-playing', () => {
 console.log('Playing')
})
但是,如何在BrowserView中访问已加载URL的DOM?
我可以在<webview>上找到章节和经文,但这是另一种动物。
我发现有关BrowserView<webview>之间的渲染器过程差异的问题,提到BrowserView使用与BrowserWindow相同的渲染器过程,但对我来说没有任何意义,因为BrowserView内容如何知道是否没有引用?对于踢球,当BrowserView内容完成加载并且什么都没发生时,我尝试使用IPC channel 从main到渲染器更改已知div ID上的背景颜色。甚至将其绑在按钮和nada上,这同样也就不足为奇了。
我觉得这对于树木情况必定是一个难题。
我正在使用Electron 11。

最佳答案

您必须通过view.webContents.executeJavaScript("document.getElementById(...)")获得此信息。
该页面是在单独的渲染器进程中加载​​的,因此,除了通过executeJavaScript` API之外,您不能真正从主进程访问该信息。
如果您可以控制页面,则可以通过IPC发送适当的信息,尽管由于无法按照here正确地序列化整个DOM元素,因此您将无法发送整个DOM元素:

Cloning DOM nodes likewise throws a DATA_CLONE_ERR exception.

关于javascript - 在Electron BrowserView中访问DOM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65511624/

相关文章:

javascript - 移动设备上的网站呈现 "The Wide Way"

xml - 从 scala 的 XML 到 w3c DOM 的任何转换?

javascript - 动态 HTML 复选框上的“全选”复选框

javascript - 如何使用 Electron 访问生产中的 sqlite3 数据库文件?

javascript - 类似于 electronJS 的框架,用于开发跨平台移动应用程序

javascript - Edge Animate 文件无法在 CMS 中运行

javascript - 检查javascript的功能测试

javascript - 如何保存排序顺序?

javascript - 在干净的 chrome/puppeteer 上下文中运行 JavaScript

windows - 最小化应用程序时的 Electron win.flashFrame()方法