93135


Electron(v22)でファイルのアップロードする部分を作成しています。  
renderer.tsからpreload.tsを経由してbackground.tsを経由するときに、  
`Uncaught (in promise) Error: An object could not be cloned.`  
がrenderer.ts部分で発生してしまいます。

原因がわからず、またどの部分が問題なのか予測がつかなくて、修正ができない状態です。  
問題発生のポイント、原因、できましたら対応方法などアドバイスいただけると嬉しいです。

## renderer.ts

[code]

    holder.addEventListener('drop', (event) => {
        event.preventDefault();
        event.stopPropagation();
    
        const files = event.dataTransfer.files;
    
        const file = files[0];
        window.electronAPI.uploadFile(file)
        // ↑Uncaught (in promise) Error: An object could not be cloned.というエラーが出る
    
        holder.innerText = "処理中..."
    });
    
[/code]

## preload.ts

[code]

    const { contextBridge, ipcRenderer } = require('electron')
    
    contextBridge.exposeInMainWorld('electronAPI',{
        // @ts-ignore
        uploadFile: (file) => ipcRenderer.invoke('file:upload', file)
    })
    
[/code]

## background.ts

[code]

    async function handleFileUpload(event,file) {
        let text = await fs.readFileSync(file.path, 'utf8');
        json = jsonFromText(text); // jsonはグローバル変数
    }
    ipcMain.handle('file:upload', handleFileUpload)
    
[/code]

phpstormを使って、background.ts にブレークポイントを設置しましたが、  
停止しないので、background.tsにもたどり着いていないように思えます。

よろしくお願いします。


CC BY-SA 4.0
2023-01-01T00:47:03.373
93130
2023-01-01T06:45:10.477
7980
question
javascript electron
Electron で Uncaught (in promise) Error: An object could not be cloned


[`ipcRenderer.invoke()`](https://www.electronjs.org/ja/docs/latest/api/ipc-
renderer#ipcrendererinvokechannel-args)
は[構造化複製アルゴリズム](https://developer.mozilla.org/ja/docs/Web/API/Web_Workers_API/Structured_clone_algorithm)を使って引数をコピーするそうで、`File`
オブジェクトは対象外です。レンダラー側で `TypedArray` に読み込んでから送るのがいいんじゃないでしょうか。


CC BY-SA 4.0
2023-01-01T06:45:10.477
93135
2023-01-01T06:45:10.477
3475
93130
answer