P粉6158297422023-08-28 19:14:20
공식 문서의 모든 내용을 코드 어디에서나 직접 구현할 수 있는 것은 아닙니다. 환경과 프로세스에 대한 간략한 이해가 필요합니다.
환경/프로세스 | 설명 |
---|---|
메인 | API는 운영 체제(낮은 수준)에 더 가깝습니다. 여기에는 파일 시스템, 운영 체제 기반 알림 팝업, 작업 표시줄 등이 포함됩니다. 이는 Electron의 핵심 API와 Node.js의 조합을 통해 구현됩니다 |
사전 로드됨 | 최근 Appendix 메인 환경에서 사용할 수 있는 강력한 API의 유출을 방지합니다. 자세한 내용은 Electron v12 변경 로그< /a> 및 문제 #23506을 참조하세요. |
렌더러 | DOM 및 프런트엔드 JavaScript(고급)와 같은 최신 웹 브라우저용 API. 이는 Chromium을 통해 달성됩니다. |
장면 | contextIsolation |
nodeIntegration |
비고 |
---|---|---|---|
A | 假 |
假 |
미리 로드할 필요가 없습니다. Node.js는 Main에서는 사용할 수 있지만 Renderer에서는 사용할 수 없습니다. |
B | 假 |
true |
미리 로드할 필요가 없습니다. Node.js는 Main 및 Renderer에서 사용할 수 있습니다. |
C | true |
假 |
사전 로딩이 필요합니다. Node.js는 기본 로드 및 사전 로드에서 사용할 수 있지만 렌더러에서는 사용할 수 없습니다. 기본값. 추천. |
D | true |
true |
사전 로드가 필요합니다. Node.js는 Main, Preload 및 Renderer에서 사용할 수 있습니다. |
메인 프로세스와 렌더러 프로세스가 통신하려면 Electron의 IPC(Inter-Process Communication)를 사용해야 합니다.
BrowserWindow.webContents.send() code>
렌더러에 메시지를 보내는 방법ipcMain.handle()
ipcMain.handle() 렌더러로부터 메시지를 수신하는 메서드메인
으아악사전 로드됨
으아악렌더러
으아악가능한 한 동일한 프로세스/환경에 대한 약속을 유지하세요. main에서의 약속은 계속해서 main에 남아야 합니다. renderer에 대한 여러분의 헌신도 렌더러에 남아 있어야 합니다. 메인 프로그램에서 프리로더, 렌더러로 점프하겠다는 약속을 하지 마세요.
대부분의 비즈니스 로직은 여전히 메인이나 렌더러 측에 있어야 하지만 사전 로드 상태에 있어서는 안 됩니다. 이는 사전 로딩이 거의 독점적으로 매체로 존재하기 때문입니다. 예압은 매우 작아야 합니다.
OP의 경우 , fs
fs는 마스터 측에서 구현되어야 합니다.
P粉3233748782023-08-28 11:18:17
Electron의 역사(Electron 릴리스에서 보안이 어떻게 변경되었는지)와 Electron 개발자가 새 애플리케이션 문서에서 사전 로드를 올바르게 사용하기 위해 취할 수 있는 기타 보안 고려 사항에 대한 더 큰 기사를 게시했습니다
.다른 사용자가 질문한 대로 아래에 내 답변을 설명하겠습니다.
preload.js
的正确方法是在您的应用可能需要 require
Electron에서
require
或通过 preload.js
中的 require
보안 관점에서 호출로 검색된 모든 것을 < a href="https://github.com/electron/ Electron/issues/9920#issuecomment-575839738" rel="noreferrer">노출하는 것은 위험합니다. 자세한 이유는 내 댓글
이 작업을 올바르게 수행하려면 아래에 자세히 설명된 대로 < 上启用许多选项code>BrowserWindowrequire
를 사용해야 합니다. 이러한 옵션을 설정하면 Electron 애플리케이션이 IPC(프로세스 간 통신)를 통해 통신하고 두 환경이 서로 격리됩니다. 이와 같이 애플리케이션을 설정하면 클라이언트가 조작하지 않고 require
main.js
으아악 preload.js
으아악 index.html
🎜 으아악