Tag: 电子

然后在()后面调用evaluate()

考虑下面的代码片段: nightmare .evaluate(function (resolve){ setTimeout(function () { resolve(null, 1234); }, 1500) }) .then(function (result) { console.log('SUCCESS', result); }) .catch(function (e) { console.log('ERROR', e); }); 假设之前已经初始化了nightmare实例,我还使用了goto()和inject() (这部分代码非常巨大,但是如果需要,我可以尝试清理它以呈现在那里)。 但是我终于得到的结果 – 不是SUCCESS 1234而是SUCCESS 1234 。 我正在做这个实验,并且已经理解,如果在.evaluate() .wait(15000)之前调用.wait(15000) (或者在.evaluate()之后和.evaluate()之前设置一个断点并等待一些时间被触发)代码正如预期的那样工作。 那个代码有什么问题?

未捕获的exception:试图在已经closures或释放的渲染器窗口中调用一个函数

我是新来的桌面应用程序开发,并使用电子node.js和JavaScript来构build我的应用程序。 这里是我想要实现的一个简短的描述: FirstWindow.html 具有与每个与事件监听器双击相关联的列表项目的产品列表。 双击任何元素。 SecondWindow.html 应该被创build,它具有从数据库(postgesql)中提取的点击产品的信息。 但是在打开应用程序时出现以下错误: 未捕获exception:试图在已closures或释放的渲染器窗口中调用函数 这里是我的代码片段,我试图实现ipcMain和ipcRenderer模块: main.js const electron = require('electron'); ipcMain.on('item_catch_in_main', function(e, productname){ SecondWindow.webContents.send('item_action_to_be_done', productname); }); FirstWindow.html <script> const { ipcRenderer } = require('electron'); ipcRenderer.send('item_catch_in_main', productname); </script> SecondWindow.html <script> const { ipcRenderer } = require('electron'); ipcRenderer.on('item_action_to_be_done', (event, item) => { console.log(item); }); </script> 请让我知道是否有人在Elecrton解决了类似的问题。 提前致谢!

如何在电子应用程序中自定义菜单?

我有一个无框电子应用程序,可以在Windows和Mac系统上运行。 我已经学会了如何设置ApplicationMenu和contextmenu(仅右键单击)。 但是,我想设置一个像设置和点击的图像将打开定制的菜单(它有它的HTML,CSS和JS),捕获像focusedWindow事件获取当前focusedWindow。 我怎样才能实现这个function? 下面是描述我正在尝试做什么的图像。

如何获取Linux / Mac / Windows上的节点/电子应用程序中的浏览器活动标签URL?

我正在寻找一个聪明的方式来获得一个跨平台的电子应用程序的活动浏览器的url。 我发现了一个使用AppleScript的Mac OS Safari和Chrome的解决scheme,但仍然没有Firefox,Windows和Linux的解决scheme:( 使用AppleScript的MacOS上的Chrome和Safari解决scheme: 使用节点 – 苹果脚本我能够获得Safari浏览器和Chromeurl。 不幸的是,Firefox不支持AppleScript,并且获取URL的方式很糟糕,并且在生产中不可用。 另外,我仍然不知道如何获取Linux和Windows上的URL。 const scripts = { 'chrome': `tell application "Google Chrome" to get URL of active tab of front window as string`, 'vivaldi': `tell application "Vivaldi" to return URL of active tab of front window`, 'safari': `tell application "Safari" to return URL of front document as string`, […]

节点和电子中的高效媒体传输

作为Electron的一个玩具项目,我正试图重写一个WPF媒体pipe理应用程序,并希望能够加速通过节点的fs加载媒体(即图像,但后来的video)的最佳方式,并获得它进入电子渲染的网页。 目前我已经有了使用Base64编码的基本工作设置: function getImage(imageID, success) { fs.readFile('f:/pictures/2.jpg', function(err, data) { if (err) throw err; success(Buffer.from(data).toString('base64')); }); } 并在我的HTML中像这样渲染: api.getImage(0, (result) => { $('#mainContent').append('<img src="data:image/jpeg;base64,' + result + '" />'); }); 这并不是我最有效的方法。 Base64转换有助于跨技术的界限,但不是最有效的方式。 我有一些其他的考虑: 通过节点托pipe文件目录,所以我可以直接从我的网页链接到文件(这是不理想的,因为文件可以来自本地文件系统的任何地方) 使用节点将文件从文件系统复制到服务目录,以便我可以链接到它通过HTML(这将是缓慢的:磁盘IO和什么) 将原始文件缓冲区以某种方式返回到网页(这看起来应该是要走的路,但不知道如何在“传统的”html中渲染) 考虑到我可能要一次处理50或100张左右的图像(包括可能调整缩略图视图的大小:通过优化BitmapImage的解码,我可以在WPF中有效地做到这一点),遵循一般的方法是什么? 为了澄清,我并没有太在乎asynchronous/进程阻塞,因为我是数据传输本身。

将同步消息从IpcMain发送到IpcRenderer – Electron

在电子中 ,可以通过ipcRenderer.sendSync('synchronous-message', 'ping')从IpcRenderer向IpcMain发送同步消息。 也可以使用window.webContents.send('ping', 'whoooooooh!')从IpcMain向IpcRenderer发送asynchronous消息window.webContents.send('ping', 'whoooooooh!') 但有什么办法发送同步信息从IpcMain到IpcRenderer?

电子knex的sqlite处理

我有一些电子应用程序的问题,用knexjs和sqlite响应。 我在节点脚本上使用knex和sqlite数据库文件,这也负责电子引导。 当我从“电子”命令运行应用程序,从控制台一切正常,应用程序工作和数据库是好的。 但是,当我打包电子包装应用程序崩溃的应用程序开始(没有任何错误)。 当我删除部分knex处理负责与sqlite文件应用程序连接工作… knex bootstraping看起来像这样: let knex = require("knex")({ client: "sqlite3", connection: { //when i comment this line app does not crash filename: path.join(app.getPath('userData'), 'database.sqlite') } }); 你有什么想法可能是错的?

共享电子应用

我正尝试使用电子打包机发布和分享我的电子应用程序。 我正在学习这个教程: https://www.christianengvall.se/electron-packager-tutorial/ 该教程使应用程序的文件夹“发布 – 构build”。 当我这样做时,一切都从那个文件夹完美的作品。 当我尝试共享应用程序,通过任何方式发送它(压缩,保pipe箱等)应用程序永远不会从这些文件夹运行,所以我不能共享我的应用程序。 试图分享时,应用程序将打开,但应用程序中的后端从不响应。 这里是我的package.json。 有没有人有任何想法如何成功地共享电子应用程序? { "name": "electron-gara", "productName": "Application", "version": "1.0.0", "main": "main.js", "author": "Me", "dependencies": { "fs": "0.0.1-security", "xlsx": { "version": "^0.11.6" } }, "devDependencies": { "electron": "^1.7.9", "electron-packager": "^9.1.0" }, "scripts": { "start": "electron .", "package-win": "electron-packager . Gara-application –overwrite –asar=true –platform=win32 –arch=ia32 –icon=assets/icons/win/gara.ico –prune=true –out=release-builds […]

使用Electron和ReactJS执行R脚本

我正在使用ReactJS和MaterialUI创buildElectron桌面应用程序如何在用户单击button后执行R脚本? 我目前有这个反应代码: handleClickOpen(event) { //what goes here? } <Button fab mini color="primary" aria-label="add" className={this.props.button} onClick={this.handleClickOpen}> <AddIcon /> </Button>

System.importasynchronous模块加载冲突与脚本标记同步加载

我开始使用primefaces/电子的JSPM来移植我用Marionette构build的网站。 我有我所有的应用程序写的木偶模块,所以我想在启动应用程序之前加载所有JavasSript文件。 <script src="jspm_packages/system.js"></script> <script src="config.js"></script> <script> loadApp = System.import('./scripts/app_definition').then(function(m){ window.App = m['App']; }); </script> <!– inject:js –> ##LOTS INJECTED SCRIPTS THAT NEEDS window.App to be defined## <script src="compiled/modules/video/video_app.js"></script> <!– endinject –> <script type="text/javascript"> loadApp.then(function(){ App.start(); }) </script> 我遇到了System.import()的asynchronous性质问题。 在System.import加载完App代码后,你将如何加载脚本? 对于生产我没有问题,因为我会连接在一个单一的JS模块中的所有文件,并加载该模块使用System.import,但这将是一个噩梦debugging,我宁愿有文件加载单独。 有什么想法吗? 谢谢!