Electron中setOverlayIcon()函数中的NativeImage无法正常工作。

3
我正在尝试为我的应用程序任务栏图标(Windows 10)制作数字徽章。我使用此代码作为起点并进行了一些修改。创建徽章后,我使用以下代码在渲染器进程中对其进行设置:
var electron=require('electron'),
    remote=electron.remote,
    nativeImage=electron.nativeImage;

...

var win=remote.getCurrentWindow();

...

var badgeDataURL=canvas.toDataURL();
var img=nativeImage.createFromDataURL(badgeDataURL);

win.setOverlayIcon(img,''+n);

运行这个程序会出现以下错误:

Uncaught Error: Could not call remote function 'setOverlayIcon'. Check that the function signature is correct. Underlying error: Error processing argument at index 0, conversion failure from #<Object>
Error: Could not call remote function 'setOverlayIcon'. Check that the function signature is correct. Underlying error: Error processing argument at index 0, conversion failure from #<Object>
    at callFunction (A:\electron\resources\electron.asar\browser\rpc-server.js:235:11)
    at EventEmitter.<anonymous> (A:\electron\resources\electron.asar\browser\rpc-server.js:342:5)
    at emitMany (events.js:127:13)
    at EventEmitter.emit (events.js:201:7)
    at WebContents.<anonymous> (A:\electron\resources\electron.asar\browser\api\web-contents.js:231:13)
    at emitTwo (events.js:106:13)
    at WebContents.emit (events.js:191:7)metaToValue @ A:\electron\resources\electron.asar\renderer\api\remote.js:217remoteMemberFunction @ A:\electron\resources\electron.asar\renderer\api\remote.js:113electronSetBadge @ app.js:81updateBadge @ app.js:156initClick @ app.js:183(anonymous function) @ app.js:203dispatch @ jquery-1.12.4.min.js:3r.handle @ jquery-1.12.4.min.js:3

我尝试了以下几种方法:
  • 不同版本的Electron(1.4.13和1.2.8)
  • 测试badgeDataURLimg的内容,它们都是有效的图像
  • 使用静态图像测试setOverlayIconwin.setOverlayIcon(__dirname+'/pics/badge.png',''+n)(它可以正常工作)
  • win.setOverlayIcon(null,'')也可以正常工作
虽然文档中说明setOverlayIcon函数的第一个参数应该是NativeImage类型,但我无法在任何地方找到一个可用的示例。有什么想法吗?
1个回答

2

对我而言,setOverlayIcon 需要在主进程中运行。以下是我解决问题的方法:

在我的渲染进程中:

ipcRenderer.send('update-badge', canvas.toDataURL())

在我的主进程中:

ipcMain.on('update-badge', (event, data) => {
    let img = nativeImage.createFromDataURL(data)
    win.setOverlayIcon(img, 'description')
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接