我的计算机上运行了一个Electron应用程序(Slack)。我想运行一些读取此应用程序的HTML DOM的JavaScript。这可能吗?如果是这样,某个地方是否有“入门”?
在我看来,由于Electron使用Node.js来托管HTML / JavaScript,我可以阅读DOM。与此同时,我可以看到这不被允许,因为它可能存在安全风险。我很安全,因为它在我的机器上运行。所以,我假设会有一个UAC提示。尽管如此,我只想弄清楚如何在可能的情况下从外部脚本中读取DOM。
谢谢
根据我的理解,你想检查或操纵一些已安装的电子应用程序的HTML?
这就是我如何使用Slack作为示例来解决如何访问(在Mac OS上):
我也尝试使用GChat应用程序,他们有一个app
文件夹。从技术上讲,您可以在index.html / index.jade(slack)中添加脚本或其他内容,并劫持main.js或index.js脚本。
例如,我能够在Google Chat的聊天应用程序中搜索BrowserWindow
对象,并轻松添加.webContents.openDevTools();
。
然而,任何解决方案都涉及手工
例如,在GChat的main.js
中,我美化了代码,我搜索了电子方法buildFromTemplate
,并找到了创建View
菜单的特定功能。我只是添加了以下内容
{
role: "toggledevtools",
label: "Toogle Dev Tools"
}
最后我能够轻松切换devtools(见屏幕截图)
如果您正在考虑通过控制台(开发工具)访问DOM,就像在浏览器中一样,那么这是您无法做到的事情。由于开发工具仅在开发环境中可用,因此一旦构建它,就无法访问它。
因此,运行脚本可能需要电子应用程序在源代码中包含脚本:
<script src="your-script.js"></script>
因此,如果他们将您的脚本包含在他们的应用程序中,那么您可以更改脚本的内容以实现您正在寻找的内容。
您可以将您的脚本添加到页面中(在加载之前)并将其与您在电子中打开的任何页面进行交互。最简单的方法是使用新窗口的preload
参数。
请记住,您甚至可以与nodejs脚本建立连接,这样就可以很好地与已打开的页面和节点/电子中的脚本进行通信。
更多这里:https://electronjs.org/docs/api/browser-window
preload
String(可选) - 指定在页面中运行其他脚本之前加载的脚本。无论是打开还是关闭节点集成,此脚本始终都可以访问节点API。该值应该是脚本的绝对文件路径。关闭节点集成时,预加载脚本可以将节点全局符号重新引入全局范围。见这里的例子。