javascript – 在atom Electron中从webview访问DOM

是否有可能从原子电子桌面开发工具包中的webview元素中抓取html,我正在尝试访问DOM但我什么都没有回来,我在运行时在控制台中尝试了一个document.links但我得到了空属性和对象作为回报?

 window.onresize = doLayout;
 var isLoading = false;

onload = function() {
var webview = document.querySelector('webview');
doLayout();

var t = webview.executeJavaScript("console.log(document.links);");

document.querySelector('#back').onclick = function() {
webview.goBack();
};

<object is="browserplugin" type="application/browser-plugin" id="browser-plugin-1" style="flex: 1 1 auto;"></object>

解决方法:

您的console.log正在登录webview的控制台,而不是父渲染器进程的控制台.从父渲染器运行document.querySelector(‘webview’).openDevTools()(在webview上有src之后,在此之前它的其他方法不可用).这将打开另一个开发工具窗口.从该控制台,您应该看到您的日志.请注意,webview和托管webview的渲染器是两个单独的webContents实例和两个单独的渲染器进程.您可以通过IPC在它们之间或主要过程之间进行通信.

不确定你的目标是什么,但是如果你想在webview中进行DOM操作,我建议使用preload script.这个脚本在webview的JS之前运行,并且你可以访问所有node.js和渲染器电子API.作为DOM. executeJavaScript将是一个漫长的困难之路,而preload脚本是为这种用例而构建的.

这是一个示例,演示1)打开webview的devtools,2)在webview的上下文中运行预加载脚本访问DOM,3)在父渲染器进程和它的子webview进程之间通过IPC进行通信:https://github.com/ccnokes/electron-tutorials/tree/master/preload-scripts

相关文章

developer-roadmap —— 提供最全的开发者技术路线指南。前端...
一个极简的文件分享工具,无需注册且没有广告即可生成共享下...
收集 Github、Gitee优秀的开源项目,并进行归类整理。项目地...
大家好,我是 Java陈序员,我们有时会搭建一个属于自己的网站...
一个提供交互式的Web UI用于生成兼容MyBatisPlus框架的相关功...
大家好,我是 Java 陈序员。权限认证是我们日常开发绕不过的...