2017-01-01 60 views
3

我想爲我的應用程序的任務欄圖標(Windows 10)做一個數字徽章。我用this code作爲起點,並對其進行了一些修改。創建徽章後,我用下面的設置它在渲染過程:NativeImage不工作在setOverlayIcon()在電子

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 

我已經試過如下:

  • 不同版本的電子的(1.4.13和1.2.8)
  • 測試badgeDataURLimg和它的內容一個有效的圖像
  • 測試setOverlayIcon與靜態圖像:​​(和它的作品)
  • win.setOverlayIcon(null,'')也適用

雖然the documentationsetOverlayIcon預計第一個參數是NativeImage類型我沒有的能夠在任何地方找到工作的例子。有任何想法嗎?

回答

1

對我而言,setOverlayIcon需要從主進程運行。這裏是固定的,在我的身邊:

在我的渲染過程:

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

而且在我的主要過程:

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