BrowserView에서 WebContentsView로 마이그레이션하기
Electron 30부터 BrowserView
는 더 이상 사용되지 않으며, WebContentView
로 대체되었다. 다행히도 마이그레이션은 비교적 간단하다.
Electron은 Chromium의 UI 프레임워크인 Views API와의 일관성을 유지하기 위해 BrowserView
에서 WebContentsView
로 전환하고 있다. WebContentsView
는 Chromium의 렌더링 파이프라인과 직접 연결된 재사용 가능한 뷰를 제공하며, 이를 통해 향후 업그레이드가 간소화되고 개발자가 Electron 앱에 비웹 UI 엘리먼트를 통합할 수 있는 가능성이 열린다. WebContentsView
를 채택함으로써 애플리케이션은 다가오는 업데이트에 대비할 수 있을 뿐만 아니라 코드 복잡성이 줄어들고 장기적으로 잠재적인 버그가 감소하는 이점을 얻는다.
BrowserWindow
와 BrowserView
에 익숙한 개발자라면 BrowserWindow
와 WebContentsView
가 각각 BaseWindow
와 View
기본 클래스를 상속받은 서브클래스라는 점을 주목해야 한다. 사용 가능한 인스턴스 변수와 메서드를 완전히 이해하려면 이 기본 클래스에 대한 문서를 참고하는 것이 좋다.
마이그레이션 단계
1. Electron을 30.0.0 이상 버전으로 업그레이드
Electron 릴리스에는 애플리케이션에 영향을 미칠 수 있는 주요 변경 사항이 포함될 수 있다. 이 마이그레이션을 진행하기 전에 먼저 애플리케이션에서 Electron 업그레이드를 테스트하고 적용하는 것이 좋다. 각 Electron 주요 버전의 주요 변경 사항 목록은 여기에서 확인할 수 있으며, Electron 블로그의 각 주요 버전 릴리스 노트에서도 확인할 수 있다.
2. 애플리케이션에서 BrowserView를 사용하는 부분 파악하기
이를 위해 코드베이스에서 new BrowserView(
를 검색해 보는 방법이 있다. 이렇게 하면 애플리케이션이 BrowserView를 어떻게 사용하고 있는지, 그리고 몇 군데를 마이그레이션해야 하는지 대략적인 감을 잡을 수 있다.
대부분의 경우, 애플리케이션에서 새로운 BrowserView를 생성하는 각각의 인스턴스는 서로 독립적으로 마이그레이션할 수 있다.
3. BrowserView
사용 부분 마이그레이션
-
인스턴스 생성 부분을 마이그레이션한다. WebContentsView와 BrowserView의 생성자는 거의 동일한 형태를 가지고 있기 때문에 비교적 간단하다. 둘 다
webPreferences
파라미터를 통해 WebPreferences를 받는다.- this.tabBar = new BrowserView({
+ this.tabBar = new WebContentsView({info기본적으로
WebContentsView
는 흰색 배경으로 인스턴스화되지만,BrowserView
는 투명한 배경으로 인스턴스화된다.
WebContentsView
에서 투명한 배경을 얻으려면 배경색을 RGBA 헥스 값으로 설정하고 알파 채널을00
으로 지정한다:+ this.webContentsView.setBackgroundColor("#00000000");
-
BrowserView
가 부모 윈도우에 추가되는 부분을 마이그레이션한다.- this.browserWindow.addBrowserView(this.tabBar)
+ this.browserWindow.contentView.addChildView(this.tabBar); -
부모 윈도우에서
BrowserView
인스턴스 메서드 호출을 마이그레이션한다.이전 메서드 새로운 메서드 참고 사항 win.setBrowserView
win.contentView.removeChildView
+win.contentView.addChildView
win.getBrowserView
win.contentView.children
win.removeBrowserView
win.contentView.removeChildView
win.setTopBrowserView
win.contentView.addChildView
기존 뷰에 addChildView
를 호출하면 해당 뷰를 맨 위로 재정렬한다.win.getBrowserViews
win.contentView.children
-
setAutoResize
인스턴스 메서드를 리사이즈 리스너로 마이그레이션한다.- this.browserView.setAutoResize({
- vertical: true,
- })
+ this.browserWindow.on('resize', () => {
+ if (!this.browserWindow || !this.webContentsView) {
+ return;
+ }
+ const bounds = this.browserWindow.getBounds();
+ this.webContentsView.setBounds({
+ x: 0,
+ y: 0,
+ width: bounds.width,
+ height: bounds.height,
+ });
+ });tipbrowserView.webContents
와browserView.setBounds
,browserView.getBounds
,browserView.setBackgroundColor
인스턴스 메서드의 기존 사용법은 마이그레이션할 필요가 없으며,WebContentsView
인스턴스에서 바로 작동한다!
4. 변경 사항 테스트 및 커밋
문제가 발생한가요? Electron의 이슈 트래커에서 WebContentsView 태그를 확인해 보고, 당신이 겪고 있는 문제가 이미 보고되었는지 확인하세요. 해당 문제가 없다면 새로운 버그 리포트를 추가해도 좋습니다. 테스트 케이스 예제를 포함하면 문제를 더 효율적으로 처리할 수 있습니다.
축하합니다! WebContentsView로 마이그레이션을 성공적으로 완료했습니다! 🎉