contextBridgeのFunction数に上限があるのでしょうか?
Electronにおいてレンダラープロセス間や、APIを実行するためにpreload.tsとの橋渡しに
contextBridge.exposeInMainWorldを使用しています。
問題なく使ってきていて機能を拡張させていた所、「そのファンクションは存在しません」といった旨のエラーが出るようになりました。(色々試したため正確なエラーメッセージを保存できていません)
コンパイルエラーも起きず、実行時にエラーとなります。
exposeInMainWorldに登録していた既存のFunctionをコメントアウトしたら新しい追加分のFunctionが正常に動作するようになりました。
exposeInMainWorldに登録するFunctionが9個までならば問題がないようで10個以上登録すると10個目からが実行時エラーになるようです。(Uncaught TypeError: Cannot read property 'bar0' of undefined)
公式のドキュメントを読んでも検索しても原因が分からなかったのですが、ご存じの方いらっしゃいましたら教えていただけないでしょうか。
以下ソースは一部抜粋です。
preload.ts
1// preload.ts 2import { contextBridge, ipcRenderer} from 'electron'; 3 4contextBridge.exposeInMainWorld('myAPI', { 5 foo0: async (): Promise<string> => { 6 return '1'; 7 }, 8 foo1: async (): Promise<string> => { 9 return '1'; 10 }, 11 foo2: async (): Promise<string> => { 12 return '1'; 13 }, 14 foo3: async (): Promise<string> => { 15 return '1'; 16 }, 17 foo4: async (): Promise<string> => { 18 return '1'; 19 }, 20 foo5: async (): Promise<string> => { 21 return '1'; 22 }, 23 foo6: async (): Promise<string> => { 24 return '1'; 25 }, 26 foo7: async (): Promise<string> => { 27 return '1'; 28 }, 29 foo8: async (): Promise<string> => { 30 return '1'; 31 }, 32 foo9: async (): Promise<string> => { 33 return '1'; 34 }, 35 // ******* 10個目以降は実行時エラーになる ******** 36 foo10: async (): Promise<string> => { 37 return '1'; 38 }, 39}); 40 41// apiキーを変えて分散させても実行時エラー。Uncaught TypeError: Cannot read property 'bar0' of undefined 42contextBridge.exposeInMainWorld('myAPI2', { 43 bar0: async (): Promise<string> => { 44 return '1'; 45 }, 46}); 47
window.d.ts
1// window.d.ts 2declare global { 3 interface Window { 4 myAPI: Sandbox 5 myAPI2: Sandbox2; 6 } 7} 8 9export interface Sandbox { 10 foo0: () => Promise<string>; 11 // 省略 12 foo10: () => Promise<string>; 13} 14 15export interface Sandbox2 { 16 bar0: () => Promise<string>; 17}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。