context-bridge.ts 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. const binding = process._linkedBinding('electron_renderer_context_bridge');
  2. const checkContextIsolationEnabled = () => {
  3. if (!process.contextIsolated) throw new Error('contextBridge API can only be used when contextIsolation is enabled');
  4. };
  5. const contextBridge: Electron.ContextBridge = {
  6. exposeInMainWorld: (key, api) => {
  7. checkContextIsolationEnabled();
  8. return binding.exposeAPIInWorld(0, key, api);
  9. },
  10. exposeInIsolatedWorld: (worldId, key, api) => {
  11. checkContextIsolationEnabled();
  12. return binding.exposeAPIInWorld(worldId, key, api);
  13. },
  14. executeInMainWorld: (script) => {
  15. checkContextIsolationEnabled();
  16. return binding.executeInWorld(0, script);
  17. }
  18. };
  19. export default contextBridge;
  20. export const internalContextBridge = {
  21. contextIsolationEnabled: process.contextIsolated,
  22. overrideGlobalValueFromIsolatedWorld: (keys: string[], value: any) => {
  23. return binding._overrideGlobalValueFromIsolatedWorld(keys, value, false);
  24. },
  25. overrideGlobalValueWithDynamicPropsFromIsolatedWorld: (keys: string[], value: any) => {
  26. return binding._overrideGlobalValueFromIsolatedWorld(keys, value, true);
  27. },
  28. overrideGlobalPropertyFromIsolatedWorld: (keys: string[], getter: Function, setter?: Function) => {
  29. return binding._overrideGlobalPropertyFromIsolatedWorld(keys, getter, setter || null);
  30. }
  31. };
  32. if (binding._isDebug) {
  33. contextBridge.internalContextBridge = internalContextBridge;
  34. }