webContents
웹 페이지를 렌더링하고 제어한다.
프로세스: Main
webContents는 EventEmitter이다. 웹 페이지를 렌더링하고 제어하는 역할을 하며, BrowserWindow 객체의 속성이다. webContents 객체에 접근하는 예제는 다음과 같다:
const { BrowserWindow } = require('electron')
const win = new BrowserWindow({ width: 800, height: 1500 })
win.loadURL('https://github.com')
const contents = win.webContents
console.log(contents)
네비게이션 이벤트
webContents 내에서 발생하는 네비게이션을 실시간으로 모니터링할 수 있는 여러 이벤트가 있다.
문서 네비게이션
webContents가 다른 페이지로 이동할 때(페이지 내 네비게이션과 달리), 다음과 같은 이벤트가 발생한다.
did-start-navigationwill-frame-navigatewill-navigate(메인 프레임이 이동할 때만 발생)will-redirect(네비게이션 중 리다이렉트가 발생할 때만 발생)did-redirect-navigation(네비게이션 중 리다이렉트가 발생할 때만 발생)did-frame-navigatedid-navigate(메인 프레임이 이동할 때만 발생)
취소 가능한 이벤트 중 하나에서 event.preventDefault()를 호출하면 이후 이벤트는 발생하지 않는다.
페이지 내 네비게이션
페이지 내 네비게이션은 페이지를 새로 고침하지 않고 현재 페이지 내의 특정 위치로 이동한다. 이러한 이벤트는 취소할 수 없다. 페이지 내 네비게이션이 발생할 때, 다음과 같은 순서로 이벤트가 실행된다:
프레임 네비게이션
will-navigate와 did-navigate 이벤트는 mainFrame이 네비게이션할 때만 발생한다. <iframe> 내부의 네비게이션도 관찰하려면 will-frame-navigate와 did-frame-navigate 이벤트를 사용해야 한다.
메서드
이 메서드들은 webContents 모듈에서 접근할 수 있다:
const { webContents } = require('electron')
console.log(webContents)
webContents.getAllWebContents()
WebContents[] 타입을 반환한다. 이 배열은 모든 WebContents 인스턴스를 포함한다. 여기에는 모든 윈도우, 웹뷰, 열린 개발자 도구, 그리고 개발자 도구 확장 프로그램의 백그라운드 페이지에 대한 웹 콘텐츠가 포함된다.
webContents.getFocusedWebContents()
WebContents | null 타입의 값을 반환한다. 현재 애플리케이션에서 포커스된 웹 콘텐츠를 반환하며, 포커스된 콘텐츠가 없으면 null을 반환한다.
webContents.fromId(id)
idInteger
주어진 ID에 해당하는 WebContents 인스턴스를 반환한다. 만약 해당 ID와 연결된 WebContents가 없다면 undefined를 반환한다.
webContents.fromFrame(frame)
frameWebFrameMain
WebContents | undefined를 반환한다. 주어진 WebFrameMain에 연결된 WebContents 인스턴스를 반환하며, 해당 WebFrameMain과 연결된 WebContents가 없을 경우 undefined를 반환한다.
webContents.fromDevToolsTargetId(targetId)
targetIdstring - WebContents 인스턴스와 연결된 Chrome DevTools 프로토콜의 TargetID.
WebContents | undefined를 반환한다. 주어진 TargetID에 해당하는 WebContents 인스턴스를 반환하거나, 해당 TargetID와 연결된 WebContents가 없으면 undefined를 반환한다.
Chrome DevTools 프로토콜과 통신할 때, 할당된 TargetID를 기반으로 WebContents 인스턴스를 조회하는 것이 유용할 수 있다.
async function lookupTargetId (browserWindow) {
const wc = browserWindow.webContents
await wc.debugger.attach('1.3')
const { targetInfo } = await wc.debugger.sendCommand('Target.getTargetInfo')
const { targetId } = targetInfo
const targetWebContents = await wc.fromDevToolsTargetId(targetId)
}
WebContents 클래스
BrowserWindow 인스턴스의 내용을 렌더링하고 제어한다.
프로세스: 메인
이 클래스는 'electron' 모듈에서 직접 내보내지 않는다. Electron API의 다른 메서드 반환값으로만 사용할 수 있다.
인스턴스 이벤트
이벤트: 'did-finish-load'
네비게이션이 완료되었을 때 발생한다. 즉, 탭의 스피너가 멈추고 onload 이벤트가 전달된 시점에 이 이벤트가 발생한다.
이벤트: 'did-fail-load'
반환 값:
eventEventerrorCodeIntegererrorDescriptionstringvalidatedURLstringisMainFramebooleanframeProcessIdIntegerframeRoutingIdInteger
이 이벤트는 did-finish-load와 유사하지만, 로드가 실패했을 때 발생한다.
에러 코드의 전체 목록과 그 의미는 여기에서 확인할 수 있다.
이벤트: 'did-fail-provisional-load'
반환값:
eventEventerrorCodeIntegererrorDescriptionstringvalidatedURLstringisMainFramebooleanframeProcessIdIntegerframeRoutingIdInteger
이 이벤트는 did-fail-load와 유사하지만, 로드가 취소된 경우(예: window.stop()이 호출된 경우)에 발생한다.
이벤트: 'did-frame-finish-load'
반환 값:
eventEventisMainFramebooleanframeProcessIdIntegerframeRoutingIdInteger
이 이벤트는 프레임의 네비게이션이 완료되었을 때 발생한다.
이벤트: 'did-start-loading'
이 이벤트는 탭의 스피너가 회전하기 시작하는 시점에 해당한다.
이벤트: 'did-stop-loading'
이 이벤트는 탭의 스피너가 회전을 멈춘 시점에 발생한다.
이벤트: 'dom-ready'
최상위 프레임의 문서가 로드되면 발생한다.
이벤트: 'page-title-updated'
반환값:
eventEventtitlestringexplicitSetboolean
이 이벤트는 네비게이션 중 페이지 제목이 설정될 때 발생한다. explicitSet은 파일 URL에서 제목이 자동으로 생성된 경우 false가 된다.
이벤트: 'page-favicon-updated'
반환값:
eventEventfaviconsstring[] - URL 배열
페이지가 파비콘 URL을 수신할 때 발생한다.
이벤트: 'content-bounds-updated'
반환값:
eventEventboundsRectangle - 요청된 새로운 콘텐츠 경계
이 이벤트는 페이지가 window.moveTo, window.resizeTo 또는 관련 API를 호출할 때 발생한다.
기본적으로 이 이벤트는 윈도우를 이동시킨다. 이 동작을 방지하려면 event.preventDefault()를 호출하면 된다.
이벤트: 'did-create-window'
반환 값:
windowBrowserWindowdetailsObjecturlstring - 생성된 윈도우의 URL.frameNamestring -window.open()호출에서 생성된 윈도우에 부여된 이름.referrerReferrer - 새 윈도우에 전달될 리퍼러. 리퍼러 정책에 따라Referer헤더가 전송될 수도 있고, 그렇지 않을 수도 있다.postBodyPostBody (선택 사항) - 새 윈도우로 전송될 POST 데이터와 함께 설정될 적절한 헤더. 전송될 POST 데이터가 없으면 값은null이 된다. 이 값은target=_blank로 설정된 폼에 의해 윈도우가 생성될 때만 정의된다.dispositionstring -default,foreground-tab,background-tab,new-window또는other중 하나의 값을 가질 수 있다.
렌더러에서 window.open을 통해 윈도우가 성공적으로 생성된 후에 발생한다. 만약 윈도우 생성이 webContents.setWindowOpenHandler에서 취소되면 이 이벤트는 발생하지 않는다.
자세한 내용과 webContents.setWindowOpenHandler와 함께 사용하는 방법은 window.open()을 참고한다.
이벤트: 'will-navigate'
반환값:
detailsEvent<>urlstring - 프레임이 이동하려는 URLisSameDocumentboolean - 이 이벤트는 window.history API를 사용한 동일 문서 내 네비게이션과 참조 프래그먼트 네비게이션에 대해 발생하지 않는다. 이 이벤트에서는 항상false로 설정된다.isMainFrameboolean - 네비게이션이 메인 프레임에서 일어나는 경우trueframeWebFrameMain | null - 이동할 프레임. 프레임이 이미 이동했거나 삭제된 후에 접근하면null이 될 수 있다.initiatorWebFrameMain | null (선택사항) - 네비게이션을 시작한 프레임. 부모 프레임(예:window.open을 통해 프레임 이름으로 열린 경우)일 수 있으며, 프레임이 아닌 다른 방식으로 네비게이션이 시작된 경우null이 된다. 이벤트가 발생하기 전에 시작 프레임이 삭제된 경우에도null이 될 수 있다.
urlstring DeprecatedisInPlaceboolean DeprecatedisMainFrameboolean DeprecatedframeProcessIdInteger DeprecatedframeRoutingIdInteger Deprecated
사용자 또는 페이지가 메인 프레임에서 네비게이션을 시작하려고 할 때 발생한다. window.location 객체가 변경되거나 사용자가 페이지 내 링크를 클릭할 때 일어날 수 있다.
이 이벤트는 webContents.loadURL이나 webContents.back과 같은 API를 통해 프로그래밍적으로 네비게이션이 시작된 경우에는 발생하지 않는다.
또한 앵커 링크를 클릭하거나 window.location.hash를 업데이트하는 등의 페이지 내 네비게이션에도 발생하지 않는다. 이러한 경우에는 did-navigate-in-page 이벤트를 사용해야 한다.
event.preventDefault()를 호출하면 네비게이션을 방지할 수 있다.
이벤트: 'will-frame-navigate'
반환값:
detailsEvent<>urlstring - 프레임이 이동하려는 URLisSameDocumentboolean - 이 이벤트는 window.history API를 사용한 동일 문서 내 네비게이션이나 참조 프래그먼트 네비게이션에서는 발생하지 않는다. 이 이벤트에서는 항상false로 설정된다.isMainFrameboolean - 네비게이션이 메인 프레임에서 발생하면trueframeWebFrameMain | null - 네비게이션 대상 프레임. 프레임이 이미 이동했거나 삭제된 후에 접근하면null이 될 수 있다.initiatorWebFrameMain | null (optional) - 네비게이션을 시작한 프레임. 이는 부모 프레임일 수 있으며(예:window.open을 사용한 경우), 프레임이 아닌 다른 방식으로 네비게이션이 시작된 경우null이 된다. 또한 이벤트가 발생하기 전에 시작 프레임이 삭제된 경우에도null이 될 수 있다.
이 이벤트는 사용자나 페이지가 어떤 프레임에서 네비게이션을 시작하려고 할 때 발생한다. window.location 객체가 변경되거나 사용자가 페이지 내 링크를 클릭할 때 트리거될 수 있다.
will-navigate와 달리, will-frame-navigate는 메인 프레임이나 그 하위 프레임이 네비게이션을 시도할 때 발생한다. 네비게이션이 메인 프레임에서 시작된 경우, isMainFrame은 true가 된다.
이 이벤트는 webContents.loadURL이나 webContents.back과 같은 API를 사용해 프로그래밍 방식으로 네비게이션이 시작될 때는 발생하지 않는다.
또한 앵커 링크를 클릭하거나 window.location.hash를 업데이트하는 등 페이지 내 네비게이션에서도 이 이벤트는 발생하지 않는다. 이러한 경우에는 did-navigate-in-page 이벤트를 사용한다.
event.preventDefault()를 호출하면 네비게이션을 방지할 수 있다.
이벤트: 'did-start-navigation'
반환값:
detailsEvent<>urlstring - 프레임이 이동하려는 URLisSameDocumentboolean - 문서 변경 없이 네비게이션이 발생했는지 여부. 같은 문서 내 네비게이션의 예로는 참조 조각(fragment) 네비게이션, pushState/replaceState, 그리고 동일 페이지 내 히스토리 네비게이션이 있다.isMainFrameboolean - 네비게이션이 메인 프레임에서 발생하는지 여부frameWebFrameMain | null - 이동할 프레임. 프레임이 이미 이동했거나 삭제된 경우null일 수 있다.initiatorWebFrameMain | null (optional) - 네비게이션을 시작한 프레임. 부모 프레임일 수 있으며(예:window.open을 사용해 프레임 이름으로 열기), 프레임이 아닌 경우에는 null이 된다. 이벤트가 발생하기 전에 시작 프레임이 삭제된 경우에도 null이 될 수 있다.
urlstring DeprecatedisInPlaceboolean DeprecatedisMainFrameboolean DeprecatedframeProcessIdInteger DeprecatedframeRoutingIdInteger Deprecated
이 이벤트는 메인 프레임을 포함한 어떤 프레임이 네비게이션을 시작할 때 발생한다.
이벤트: 'will-redirect'
반환값:
detailsEvent<>urlstring - 프레임이 이동하려는 URL.isSameDocumentboolean - 문서가 변경되지 않고 네비게이션이 발생했는지 여부. 같은 문서 내 네비게이션의 예로는 참조 프래그먼트 네비게이션, pushState/replaceState, 그리고 동일 페이지 내 히스토리 네비게이션이 있다.isMainFrameboolean - 네비게이션이 메인 프레임에서 발생하는지 여부.frameWebFrameMain | null - 이동할 프레임. 프레임이 이미 이동했거나 삭제된 경우null이 될 수 있다.initiatorWebFrameMain | null (선택 사항) - 네비게이션을 시작한 프레임. 이는 부모 프레임일 수 있으며 (예:window.open을 통해 프레임 이름을 사용한 경우), 또는 프레임이 아닌 다른 요소에 의해 시작된 경우 null이 될 수 있다. 또한 이벤트가 발생하기 전에 시작 프레임이 삭제된 경우에도 null이 될 수 있다.
urlstring DeprecatedisInPlaceboolean DeprecatedisMainFrameboolean DeprecatedframeProcessIdInteger DeprecatedframeRoutingIdInteger Deprecated
서버 측 리다이렉트가 네비게이션 중에 발생할 때 이 이벤트가 발생한다. 예를 들어 302 리다이렉트가 있을 때다.
이 이벤트는 did-start-navigation 이후에 발생하며, 동일한 네비게이션에 대한 did-redirect-navigation 이벤트보다 항상 먼저 발생한다.
event.preventDefault()를 호출하면 네비게이션 (리다이렉트뿐만 아니라)을 막을 수 있다.
이벤트: 'did-redirect-navigation'
반환값:
detailsEvent<>urlstring - 프레임이 이동 중인 URLisSameDocumentboolean - 문서 변경 없이 네비게이션이 발생했는지 여부. 같은 문서 내 네비게이션의 예로는 참조 프래그먼트 네비게이션, pushState/replaceState, 그리고 동일 페이지 내 히스토리 네비게이션이 있다.isMainFrameboolean - 네비게이션이 메인 프레임에서 발생 중인지 여부frameWebFrameMain | null - 이동할 프레임. 프레임이 이미 이동했거나 삭제된 경우null이 될 수 있다.initiatorWebFrameMain | null (선택 사항) - 네비게이션을 시작한 프레임. 이는 부모 프레임일 수 있다(예:window.open을 사용한 프레임 이름). 프레임에 의해 시작되지 않은 경우 null이 된다. 또한 이벤트가 발생하기 전에 시작 프레임이 삭제된 경우에도 null이 될 수 있다.
urlstring DeprecatedisInPlaceboolean DeprecatedisMainFrameboolean DeprecatedframeProcessIdInteger DeprecatedframeRoutingIdInteger Deprecated
네비게이션 중 서버 측 리다이렉트가 발생한 후에 이벤트가 발생한다. 예를 들어 302 리다이렉트가 있을 때 이 이벤트가 발생한다.
이 이벤트는 막을 수 없다. 리다이렉트를 막고 싶다면 위의 will-redirect 이벤트를 확인해야 한다.
이벤트: 'did-navigate'
반환 값:
eventEventurlstringhttpResponseCodeInteger - HTTP가 아닌 네비게이션의 경우 -1httpStatusTextstring - HTTP가 아닌 네비게이션의 경우 빈 문자열
메인 프레임의 네비게이션이 완료되었을 때 발생한다.
이 이벤트는 앵커 링크를 클릭하거나 window.location.hash를 업데이트하는 등의 페이지 내 네비게이션에는 발생하지 않는다. 이러한 경우에는 did-navigate-in-page 이벤트를 사용한다.
이벤트: 'did-frame-navigate'
반환값:
eventEventurlstringhttpResponseCodeInteger - HTTP가 아닌 네비게이션의 경우 -1httpStatusTextstring - HTTP가 아닌 네비게이션의 경우 빈 문자열isMainFramebooleanframeProcessIdIntegerframeRoutingIdInteger
이 이벤트는 프레임 네비게이션이 완료될 때 발생한다.
앵커 링크를 클릭하거나 window.location.hash를 업데이트하는 등의 페이지 내 네비게이션에서는 이 이벤트가 발생하지 않는다. 이러한 경우에는 did-navigate-in-page 이벤트를 사용해야 한다.
이벤트: 'did-navigate-in-page'
반환값:
event이벤트url문자열isMainFrame불리언frameProcessId정수frameRoutingId정수
이 이벤트는 페이지 내의 어떤 프레임에서 페이지 내 네비게이션이 발생했을 때 발생한다.
페이지 내 네비게이션이 발생하면 페이지의 URL은 변경되지만, 페이지 외부로의 네비게이션은 일어나지 않는다. 이 현상은 앵커 링크를 클릭하거나 DOM의 hashchange 이벤트가 트리거될 때 발생한다.
이벤트: 'will-prevent-unload'
반환값:
eventEvent
beforeunload 이벤트 핸들러가 페이지 언로드를 취소하려고 할 때 발생한다.
event.preventDefault()를 호출하면 beforeunload 이벤트 핸들러를 무시하고 페이지 언로드를 허용한다.
const { BrowserWindow, dialog } = require('electron')
const win = new BrowserWindow({ width: 800, height: 600 })
win.webContents.on('will-prevent-unload', (event) => {
const choice = dialog.showMessageBoxSync(win, {
type: 'question',
buttons: ['Leave', 'Stay'],
title: 'Do you want to leave this site?',
message: 'Changes you made may not be saved.',
defaultId: 0,
cancelId: 1
})
const leave = (choice === 0)
if (leave) {
event.preventDefault()
}
})
참고: 이 이벤트는 BrowserViews에서도 발생하지만, 실제로는 반영되지 않는다. 이는 명세에 따라 BrowserView의 라이프사이클을 소유하는 BrowserWindow와 연결하지 않기로 결정했기 때문이다.
이벤트: 'render-process-gone'
반환값:
event이벤트detailsRenderProcessGoneDetails
렌더러 프로세스가 예기치 않게 사라질 때 발생한다. 일반적으로 프로세스가 크래시되거나 강제 종료된 경우에 이 이벤트가 발생한다.
이벤트: 'unresponsive'
웹 페이지가 응답하지 않을 때 발생한다.
이벤트: 'responsive'
웹 페이지가 응답하지 않던 상태에서 다시 응답 가능한 상태로 돌아올 때 발생하는 이벤트이다.
이벤트: 'plugin-crashed'
반환값:
eventEventnamestringversionstring
플러그인 프로세스가 충돌했을 때 발생한다.
이벤트: 'destroyed'
webContents가 파괴될 때 발생한다.
이벤트: 'input-event'
반환값:
eventEventinputEventInputEvent
WebContents에 입력 이벤트가 전송될 때 발생한다. 자세한 내용은 InputEvent를 참고한다.
이벤트: 'before-input-event'
반환 값:
eventEventinputObject - 입력 속성.typestring -keyUp또는keyDown중 하나.keystring - KeyboardEvent.key와 동일.codestring - KeyboardEvent.code와 동일.isAutoRepeatboolean - KeyboardEvent.repeat와 동일.isComposingboolean - KeyboardEvent.isComposing와 동일.shiftboolean - KeyboardEvent.shiftKey와 동일.controlboolean - KeyboardEvent.controlKey와 동일.altboolean - KeyboardEvent.altKey와 동일.metaboolean - KeyboardEvent.metaKey와 동일.locationnumber - KeyboardEvent.location와 동일.modifiersstring[] - InputEvent.modifiers 참조.
페이지에서 keydown과 keyup 이벤트를 전달하기 전에 발생한다. event.preventDefault를 호출하면 페이지의 keydown/keyup 이벤트와 메뉴 단축키를 막을 수 있다.
메뉴 단축키만 막으려면 setIgnoreMenuShortcuts를 사용한다:
const { BrowserWindow } = require('electron')
const win = new BrowserWindow({ width: 800, height: 600 })
win.webContents.on('before-input-event', (event, input) => {
// 예를 들어, Ctrl/Cmd 키가 눌렸을 때만 애플리케이션 메뉴 키보드 단축키를 활성화한다.
win.webContents.setIgnoreMenuShortcuts(!input.control && !input.meta)
})
이벤트: 'enter-html-full-screen'
HTML API에 의해 윈도우가 전체 화면 상태로 전환될 때 발생한다.
이벤트: 'leave-html-full-screen'
이 이벤트는 HTML API에 의해 트리거된 전체 화면 상태에서 윈도우가 벗어날 때 발생한다.
이벤트: 'zoom-changed'
반환 값:
eventEventzoomDirectionstring -in또는out값을 가질 수 있다.
사용자가 마우스 휠을 사용해 확대/축소 수준을 변경하려고 할 때 발생한다.
이벤트: 'blur'
WebContents가 포커스를 잃을 때 발생한다.
이벤트: 'focus'
WebContents가 포커스를 얻을 때 이벤트가 발생한다.
macOS에서는 포커스가 있다는 것은 WebContents가 윈도우의 첫 번째 응답자가 된다는 것을 의미한다. 따라서 윈도우 간에 포커스를 전환해도 각 윈도우의 첫 번째 응답자가 변경되지 않기 때문에 WebContents의 focus와 blur 이벤트가 발생하지 않는다.
WebContents의 focus와 blur 이벤트는 동일한 윈도우 내에서 다른 WebContents와 BrowserView 간의 포커스 변경을 감지하는 데만 사용해야 한다.
이벤트: 'devtools-open-url'
반환값:
eventEventurlstring - 클릭하거나 선택한 링크의 URL
DevTools에서 링크를 클릭하거나 컨텍스트 메뉴에서 '새 탭에서 열기'를 선택했을 때 발생한다.
이벤트: 'devtools-search-query'
반환값:
eventEventquerystring - 검색할 텍스트
컨텍스트 메뉴에서 '검색'을 선택했을 때 발생하는 이벤트이다.
이벤트: 'devtools-opened'
DevTools가 열릴 때 발생하는 이벤트다.
이벤트: 'devtools-closed'
DevTools가 닫힐 때 발생한다.
이벤트: 'devtools-focused'
DevTools가 포커스되거나 열릴 때 발생한다.
이벤트: 'certificate-error'
반환값:
eventEventurlstringerrorstring - 에러 코드certificateCertificatecallbackFunctionisTrustedboolean - 인증서가 신뢰할 수 있는지 여부를 나타냄
isMainFrameboolean
url에 대한 certificate 검증에 실패했을 때 발생한다.
사용법은 app의 certificate-error 이벤트와 동일하다.
이벤트: 'select-client-certificate'
반환값:
eventEventurlURLcertificateListCertificate[]callbackFunctioncertificateCertificate - 주어진 목록에서 선택된 인증서여야 한다.
클라이언트 인증서가 요청될 때 발생한다.
이 이벤트의 사용법은 app의 select-client-certificate 이벤트와 동일하다.
이벤트: 'login'
반환값:
eventEventauthenticationResponseDetailsObjecturlURL
authInfoObjectisProxybooleanschemestringhoststringportIntegerrealmstring
callbackFunctionusernamestring (선택 사항)passwordstring (선택 사항)
이 이벤트는 webContents가 기본 인증을 시도할 때 발생한다.
사용법은 app의 login 이벤트와 동일하다.
이벤트: 'found-in-page'
반환값:
eventEventresultObjectrequestIdIntegeractiveMatchOrdinalInteger - 현재 일치 항목의 위치matchesInteger - 일치 항목의 총 개수selectionAreaRectangle - 첫 번째 일치 항목 영역의 좌표finalUpdateboolean
webContents.findInPage 요청에 대한 결과가 준비되면 이 이벤트가 발생한다.
이벤트: 'media-started-playing'
미디어 재생이 시작될 때 발생한다.
이벤트: 'media-paused'
미디어가 일시 정지되거나 재생이 완료되었을 때 발생한다.
Event: 'audio-state-changed'
반환값:
eventEvent<>audibleboolean - 하나 이상의 프레임이나 자식webContents에서 오디오가 재생되고 있으면 true.
미디어가 들리기 시작하거나 들리지 않게 될 때 발생한다.
이벤트: 'did-change-theme-color'
반환값:
eventEventcolor(string | null) - 테마 색상은 '#rrggbb' 형식으로 제공된다. 테마 색상이 설정되지 않은 경우null이다.
페이지의 테마 색상이 변경될 때 발생한다. 이 이벤트는 일반적으로 다음과 같은 메타 태그를 만났을 때 발생한다:
<meta name='theme-color' content='#ff0000'>
이벤트: 'update-target-url'
반환 값:
eventEventurlstring
이 이벤트는 마우스가 링크 위로 이동하거나 키보드로 링크에 포커스가 이동할 때 발생한다.
이벤트: 'cursor-changed'
반환값:
eventEventtypestringimageNativeImage (선택 사항)scaleFloat (선택 사항) - 커스텀 커서의 스케일링 팩터sizeSize (선택 사항) -image의 크기hotspotPoint (선택 사항) - 커스텀 커서의 핫스팟 좌표
커서 타입이 변경될 때 발생하는 이벤트다. type 파라미터는 pointer, crosshair, hand, text, wait, help, e-resize, n-resize, ne-resize, nw-resize, s-resize, se-resize, sw-resize, w-resize, ns-resize, ew-resize, nesw-resize, nwse-resize, col-resize, row-resize, m-panning, m-panning-vertical, m-panning-horizontal, e-panning, n-panning, ne-panning, nw-panning, s-panning, se-panning, sw-panning, w-panning, move, vertical-text, cell, context-menu, alias, progress, nodrop, copy, none, not-allowed, zoom-in, zoom-out, grab, grabbing, custom, null, drag-drop-none, drag-drop-move, drag-drop-copy, drag-drop-link, ns-no-resize, ew-no-resize, nesw-no-resize, nwse-no-resize, 또는 default가 될 수 있다.
type 파라미터가 custom인 경우, image 파라미터는 커스텀 커서 이미지를 NativeImage 형태로 포함한다. 그리고 scale, size, hotspot 파라미터는 커스텀 커서에 대한 추가 정보를 제공한다.
이벤트: 'context-menu'
반환값:
eventEventparamsObjectxInteger - x 좌표.yInteger - y 좌표.frameWebFrameMain | null - 컨텍스트 메뉴가 호출된 프레임. 프레임이 네비게이션 되거나 파괴된 후에 접근하면null이 될 수 있다.linkURLstring - 컨텍스트 메뉴가 호출된 노드를 감싸는 링크의 URL.linkTextstring - 링크와 관련된 텍스트. 링크 내용이 이미지인 경우 빈 문자열일 수 있다.pageURLstring - 컨텍스트 메뉴가 호출된 최상위 페이지의 URL.frameURLstring - 컨텍스트 메뉴가 호출된 서브프레임의 URL.srcURLstring - 컨텍스트 메뉴가 호출된 엘리먼트의 소스 URL. 소스 URL이 있는 엘리먼트는 이미지, 오디오, 비디오 등이다.mediaTypestring - 컨텍스트 메뉴가 호출된 노드의 타입.none,image,audio,video,canvas,file,plugin중 하나가 될 수 있다.hasImageContentsboolean - 컨텍스트 메뉴가 비어 있지 않은 내용을 가진 이미지에서 호출되었는지 여부.isEditableboolean - 컨텍스트가 편집 가능한지 여부.selectionTextstring - 컨텍스트 메뉴가 호출된 선택 영역의 텍스트.titleTextstring - 컨텍스트 메뉴가 호출된 선택 영역의 제목 텍스트.altTextstring - 컨텍스트 메뉴가 호출된 선택 영역의 대체 텍스트.suggestedFilenamestring - 컨텍스트 메뉴의 '링크를 다른 이름으로 저장' 옵션을 통해 파일을 저장할 때 사용할 제안된 파일명.selectionRectRectangle - 문서 공간에서 선택 영역의 좌표를 나타내는 사각형.selectionStartOffsetnumber - 선택 텍스트의 시작 위치.referrerPolicyReferrer - 메뉴가 호출된 프레임의 리퍼러 정책.misspelledWordstring - 커서 아래에 있는 잘못된 단어, 있다면.dictionarySuggestionsstring[] -misspelledWord를 대체하기 위해 사용자에게 보여줄 제안 단어 배열. 잘못된 단어가 있고 맞춤법 검사기가 활성화된 경우에만 사용 가능.frameCharsetstring - 메뉴가 호출된 프레임의 문자 인코딩.formControlTypestring - 컨텍스트 메뉴가 호출된 소스. 가능한 값은none,button-button,field-set,input-button,input-checkbox,input-color,input-date,input-datetime-local,input-email,input-file,input-hidden,input-image,input-month,input-number,input-password,input-radio,input-range,input-reset,input-search,input-submit,input-telephone,input-text,input-time,input-url,input-week,output,reset-button,select-list,select-list,select-multiple,select-one,submit-button,text-area등이다.spellcheckEnabledboolean - 컨텍스트가 편집 가능한 경우, 맞춤법 검사가 활성화되었는지 여부.menuSourceTypestring - 컨텍스트 메뉴를 호출한 입력 소스.none,mouse,keyboard,touch,touchMenu,longPress,longTap,touchHandle,stylus,adjustSelection,adjustSelectionReset중 하나가 될 수 있다.mediaFlagsObject - 컨텍스트 메뉴가 호출된 미디어 엘리먼트의 플래그.inErrorboolean - 미디어 엘리먼트가 오류 상태인지 여부.isPausedboolean - 미디어 엘리먼트가 일시 정지되었는지 여부.isMutedboolean - 미디어 엘리먼트가 음소거되었는지 여부.hasAudioboolean - 미디어 엘리먼트에 오디오가 있는지 여부.isLoopingboolean - 미디어 엘리먼트가 반복 재생 중인지 여부.isControlsVisibleboolean - 미디어 엘리먼트의 컨트롤이 보이는지 여부.canToggleControlsboolean - 미디어 엘리먼트의 컨트롤을 토글할 수 있는지 여부.canPrintboolean - 미디어 엘리먼트를 인쇄할 수 있는지 여부.canSaveboolean - 미디어 엘리먼트를 다운로드할 수 있는지 여부.canShowPictureInPictureboolean - 미디어 엘리먼트가 picture-in-picture를 보여줄 수 있는지 여부.isShowingPictureInPictureboolean - 미디어 엘리먼트가 현재 picture-in-picture를 보여주고 있는지 여부.canRotateboolean - 미디어 엘리먼트를 회전할 수 있는지 여부.canLoopboolean - 미디어 엘리먼트를 반복할 수 있는지 여부.
editFlagsObject - 랜더러가 해당 작업을 수행할 수 있다고 판단하는지 여부를 나타내는 플래그.canUndoboolean - 랜더러가 실행 취소를 할 수 있다고 판단하는지 여부.canRedoboolean - 랜더러가 다시 실행을 할 수 있다고 판단하는지 여부.canCutboolean - 랜더러가 잘라내기를 할 수 있다고 판단하는지 여부.canCopyboolean - 랜더러가 복사를 할 수 있다고 판단하는지 여부.canPasteboolean - 랜더러가 붙여넣기를 할 수 있다고 판단하는지 여부.canDeleteboolean - 랜더러가 삭제를 할 수 있다고 판단하는지 여부.canSelectAllboolean - 랜더러가 전체 선택을 할 수 있다고 판단하는지 여부.canEditRichlyboolean - 랜더러가 텍스트를 풍부하게 편집할 수 있다고 판단하는지 여부.
처리해야 할 새로운 컨텍스트 메뉴가 있을 때 발생한다.
이벤트: 'select-bluetooth-device'
반환 값:
eventEventdevicesBluetoothDevice[]callbackFunctiondeviceIdstring
navigator.bluetooth.requestDevice 호출 시 블루투스 장치를 선택해야 할 때 이 이벤트가 발생한다. callback은 선택할 장치의 deviceId와 함께 호출해야 한다. callback에 빈 문자열을 전달하면 요청을 취소한다.
이 이벤트에 대한 리스너를 추가하지 않거나, 이벤트를 처리할 때 event.preventDefault를 호출하지 않으면, 첫 번째로 사용 가능한 장치가 자동으로 선택된다.
블루투스의 특성상, navigator.bluetooth.requestDevice 호출 시 장치를 스캔하는 데 시간이 걸릴 수 있으며, callback이 장치 ID나 빈 문자열과 함께 호출될 때까지 select-bluetooth-device 이벤트가 여러 번 발생할 수 있다.
const { app, BrowserWindow } = require('electron')
let win = null
app.whenReady().then(() => {
win = new BrowserWindow({ width: 800, height: 600 })
win.webContents.on('select-bluetooth-device', (event, deviceList, callback) => {
event.preventDefault()
const result = deviceList.find((device) => {
return device.deviceName === 'test'
})
if (!result) {
// 장치를 찾지 못했으므로 더 오래 기다리거나(예: 장치가 켜질 때까지)
// 빈 문자열과 함께 callback을 호출해 요청을 취소한다.
callback('')
} else {
callback(result.deviceId)
}
})
})
이벤트: 'paint'
반환값:
detailsEvent<>textureOffscreenSharedTexture (선택 사항) 실험적 -webPreferences.offscreen.useSharedTexture가true일 때 프레임의 GPU 공유 텍스처.
dirtyRectRectangleimageNativeImage - 전체 프레임의 이미지 데이터.
새로운 프레임이 생성될 때 발생한다. 버퍼에는 변경된 영역만 전달된다.
const { BrowserWindow } = require('electron')
const win = new BrowserWindow({ webPreferences: { offscreen: true } })
win.webContents.on('paint', (event, dirty, image) => {
// updateBitmap(dirty, image.getBitmap())
})
win.loadURL('https://github.com')
공유 텍스처 기능(webPreferences.offscreen.useSharedTexture를 true로 설정)을 사용하면, CPU와 GPU 메모리 간 데이터 복사 오버헤드 없이 Chromium의 하드웨어 가속 지원을 통해 텍스처 핸들을 외부 렌더링 파이프라인에 전달할 수 있다. 이 기능은 고성능 렌더링 시나리오에 유용하다.
동시에 존재할 수 있는 텍스처의 수는 제한적이므로, 텍스처 사용을 마치면 texture.release()를 가능한 한 빨리 호출해야 한다. 텍스처 라이프사이클을 직접 관리함으로써 texture.textureInfo를 IPC를 통해 다른 프로세스에 안전하게 전달할 수 있다.
const { BrowserWindow } = require('electron')
const win = new BrowserWindow({ webPreferences: { offscreen: { useSharedTexture: true } } })
win.webContents.on('paint', async (e, dirty, image) => {
if (e.texture) {
// 라이프사이클을 직접 관리하면 비동기 핸들러에서 이벤트를 처리하거나 `e.texture.textureInfo`를 다른 프로세스에 전달할 수 있다.
// (`e.texture`가 아닌 `e.texture.release` 함수는 IPC를 통해 전달할 수 없다.)
await new Promise(resolve => setTimeout(resolve, 50))
// 네이티브 텍스처 핸들을 네이티브 코드로 전달하여 렌더링 파이프라인에 임포트할 수 있다.
// 예시: https://github.com/electron/electron/tree/main/spec/fixtures/native-addon/osr-gpu
// importTextureHandle(dirty, e.texture.textureInfo)
// 기본 프레임 풀이 고갈되기 전에 가능한 한 빨리 `e.texture.release()`를 호출해야 한다.
e.texture.release()
}
})
win.loadURL('https://github.com')
이벤트: 'devtools-reload-page'
devtools 윈도우가 webContents에 페이지를 다시 로드하도록 지시할 때 발생한다.
이벤트: 'will-attach-webview'
반환값:
eventEventwebPreferencesWebPreferences - 게스트 페이지에서 사용할 웹 환경 설정. 이 객체를 수정해 게스트 페이지의 설정을 조정할 수 있다.paramsRecord<string, string> -srcURL과 같은 다른<webview>매개변수. 이 객체를 수정해 게스트 페이지의 매개변수를 조정할 수 있다.
이 이벤트는 <webview>의 웹 콘텐츠가 현재 웹 콘텐츠에 첨부될 때 발생한다. event.preventDefault()를 호출하면 게스트 페이지가 파괴된다.
이 이벤트는 <webview>가 로드되기 전에 webContents의 webPreferences를 구성하는 데 사용할 수 있다. 또한 <webview> 속성으로 설정할 수 없는 설정을 지정할 수 있는 기능을 제공한다.
이벤트: 'did-attach-webview'
반환값:
eventEventwebContentsWebContents -<webview>가 사용하는 게스트 웹 콘텐츠
이 이벤트는 <webview>가 현재 웹 콘텐츠에 연결되었을 때 발생한다.
이벤트: 'console-message'
반환 값:
eventEventlevelInteger - 로그 레벨. 0부터 3까지의 값을 가지며, 각각verbose,info,warning,error에 해당한다.messagestring - 실제 콘솔 메시지lineInteger - 이 콘솔 메시지를 발생시킨 소스 코드의 라인 번호sourceIdstring
연결된 윈도우에서 콘솔 메시지를 기록할 때 발생한다.
이벤트: 'preload-error'
반환값:
eventEventpreloadPathstringerrorError
프리로드 스크립트 preloadPath에서 처리되지 않은 예외 error가 발생했을 때 이벤트가 발생한다.
이벤트: 'ipc-message'
반환값:
eventIpcMainEventchannelstring...argsany[]
렌더러 프로세스가 ipcRenderer.send()를 통해 비동기 메시지를 보낼 때 발생한다.
이 WebContents에서 보낸 IPC 메시지에 응답하기 위해 IpcMain과 유사한 인터페이스를 제공하는 webContents.ipc도 참고한다.
이벤트: 'ipc-message-sync'
반환값:
eventIpcMainEventchannelstring...argsany[]
렌더러 프로세스가 ipcRenderer.sendSync()를 통해 동기식 메시지를 보낼 때 발생한다.
이 WebContents에서 보낸 IPC 메시지에 응답하기 위한 IpcMain과 유사한 인터페이스를 제공하는 webContents.ipc도 참고한다.
이벤트: 'preferred-size-changed'
반환 값:
eventEventpreferredSizeSize - 스크롤 없이 문서 레이아웃을 포함하는 데 필요한 최소 크기
WebContents의 선호 크기가 변경될 때 발생한다.
이 이벤트는 webPreferences에서 enablePreferredSizeMode가 true로 설정된 경우에만 발생한다.
이벤트: 'frame-created'
반환값:
eventEventdetailsObjectframeWebFrameMain | null - 생성된 프레임. 프레임이 네비게이션 되거나 파괴된 후에 접근하면null이 될 수 있다.
이 이벤트는 mainFrame, <iframe>, 또는 중첩된 <iframe>이 페이지 내에서 로드될 때 발생한다.
인스턴스 메서드
contents.loadURL(url[, options])
urlstring
반환 값: Promise<void> - 페이지 로드가 완료되면 Promise가 해결되고 (did-finish-load 참조), 페이지 로드에 실패하면 Promise가 거부된다 (did-fail-load 참조). 처리되지 않은 거부 오류를 방지하기 위해 기본적으로 noop 거부 핸들러가 연결되어 있다.
윈도우에 url을 로드한다. url은 반드시 프로토콜 접두사(예: http:// 또는 file://)를 포함해야 한다. HTTP 캐시를 우회하여 로드하려면 pragma 헤더를 사용한다.
const win = new BrowserWindow()
const options = { extraHeaders: 'pragma: no-cache\n' }
win.webContents.loadURL('https://github.com', options)
contents.loadFile(filePath[, options])
filePathstring
Promise<void>를 반환한다. 이 Promise는 페이지 로딩이 완료되면 해결되고(did-finish-load 참조), 페이지 로딩이 실패하면 거부된다(did-fail-load 참조).
윈도우에서 주어진 파일을 로드한다. filePath는 애플리케이션 루트를 기준으로 한 HTML 파일의 경로여야 한다. 예를 들어 다음과 같은 애플리케이션 구조가 있다고 가정해 보자:
| root
| - package.json
| - src
| - main.js
| - index.html
이 경우 다음과 같은 코드를 사용할 수 있다:
const win = new BrowserWindow()
win.loadFile('src/index.html')
contents.downloadURL(url[, options])
urlstring
이 메서드는 네비게이션 없이 url에 있는 리소스를 다운로드한다. session의 will-download 이벤트가 트리거된다.
contents.getURL()
string 타입의 값을 반환한다. 현재 웹 페이지의 URL을 나타낸다.
const { BrowserWindow } = require('electron')
const win = new BrowserWindow({ width: 800, height: 600 })
win.loadURL('https://github.com').then(() => {
const currentURL = win.webContents.getURL()
console.log(currentURL)
})
contents.getTitle()
string 타입을 반환한다. 현재 웹 페이지의 제목을 나타낸다.
contents.isDestroyed()
boolean을 반환한다. 웹 페이지가 파괴되었는지 여부를 나타낸다.
contents.close([opts])
optsObject (선택 사항)waitForBeforeUnloadboolean - true로 설정하면 페이지를 닫기 전에beforeunload이벤트를 발생시킨다. 페이지가 언로드를 막으면 WebContents는 닫히지 않는다. 페이지가 언로드 방지를 요청하면will-prevent-unload이벤트가 발생한다.
페이지를 닫는다. 웹 콘텐츠가 window.close()를 호출한 것과 동일한 효과를 가진다.
페이지가 성공적으로 닫히면(즉, 페이지가 언로드를 막지 않거나 waitForBeforeUnload가 false이거나 지정되지 않은 경우), WebContents는 제거되고 더 이상 사용할 수 없게 된다. destroyed 이벤트가 발생한다.
contents.focus()는 웹 페이지에 포커스를 설정한다.
contents.isFocused()
boolean을 반환한다. 웹 페이지가 현재 포커스 상태인지 여부를 나타낸다.
contents.isLoading()
boolean 타입을 반환한다. 웹 페이지가 아직 리소스를 로드 중인지 여부를 나타낸다.
contents.isLoadingMainFrame()
boolean 타입을 반환한다. 메인 프레임(내부의 iframe이나 다른 프레임이 아닌)이 여전히 로딩 중인지 여부를 나타낸다.
contents.isWaitingForResponse()
boolean을 반환한다. 웹 페이지가 메인 리소스로부터 첫 응답을 기다리고 있는지 여부를 나타낸다.
contents.stop()
진행 중인 모든 네비게이션을 중지한다.
contents.reload()
현재 웹 페이지를 새로고침한다.
contents.reloadIgnoringCache()
현재 페이지를 다시 로드하고 캐시를 무시한다.
contents.canGoBack() 더 이상 사용되지 않음
History
| Version(s) | Changes |
|---|---|
None | API DEPRECATED |
boolean을 반환한다. 브라우저가 이전 웹 페이지로 돌아갈 수 있는지 여부를 나타낸다.
더 이상 사용되지 않음: 새로운 contents.navigationHistory.canGoBack API를 사용해야 한다.
contents.canGoForward() 사용 중단됨
History
| Version(s) | Changes |
|---|---|
None | API DEPRECATED |
boolean을 반환한다. 브라우저가 다음 웹 페이지로 이동할 수 있는지 여부를 나타낸다.
사용 중단됨: 새로운 contents.navigationHistory.canGoForward API를 사용해야 한다.
contents.canGoToOffset(offset) Deprecated
History
| Version(s) | Changes |
|---|---|
None | API DEPRECATED |
offsetInteger
boolean을 반환한다 - 웹 페이지가 offset으로 이동할 수 있는지 여부를 나타낸다.
Deprecated: 새로운 contents.navigationHistory.canGoToOffset API를 사용해야 한다.
contents.clearHistory() 사용 중단됨
History
| Version(s) | Changes |
|---|---|
None | API DEPRECATED |
네비게이션 히스토리를 지운다.
사용 중단됨: 새로운 contents.navigationHistory.clear API를 사용해야 한다.
contents.goBack() Deprecated
History
| Version(s) | Changes |
|---|---|
None | API DEPRECATED |
브라우저를 이전 웹 페이지로 이동시킨다.
Deprecated: 새로운 contents.navigationHistory.goBack API를 사용해야 한다.
contents.goForward() 사용 중단됨
YAML history deprecated:
- pr-url: https://github.com/electron/electron/pull/41752 breaking-changes-header: deprecated-clearhistory-cangoback-goback-cangoforward-goforward-gotoindex-cangotooffset-gotooffset-on-webcontents
브라우저가 웹 페이지를 앞으로 이동하도록 한다.
사용 중단됨: 새로운 contents.navigationHistory.goForward API를 사용해야 한다.
contents.goToIndex(index) Deprecated
History
| Version(s) | Changes |
|---|---|
None | API DEPRECATED |
indexInteger
브라우저를 지정된 절대 웹 페이지 인덱스로 이동시킨다.
Deprecated: 새로운 contents.navigationHistory.goToIndex API를 사용해야 한다.
contents.goToOffset(offset) Deprecated
History
| Version(s) | Changes |
|---|---|
None | API DEPRECATED |
offsetInteger
현재 항목에서 지정된 오프셋으로 이동한다.
Deprecated: 새로운 contents.navigationHistory.goToOffset API를 사용해야 한다.
contents.isCrashed()는 렌더러 프로세스가 크래시되었는지 여부를 boolean 값으로 반환한다.
contents.forcefullyCrashRenderer()
이 메서드는 현재 webContents를 호스팅하는 렌더러 프로세스를 강제로 종료한다. 이로 인해 render-process-gone 이벤트가 reason=killed 또는 reason=crashed와 함께 발생한다. 일부 webContents는 렌더러 프로세스를 공유하므로, 이 메서드를 호출하면 다른 webContents의 호스트 프로세스도 함께 종료될 수 있다.
이 메서드를 호출한 직후 reload()를 호출하면, 리로드가 새로운 프로세스에서 강제로 실행된다. 이 방법은 프로세스가 불안정하거나 사용할 수 없는 상태일 때, 예를 들어 unresponsive 이벤트로부터 복구하기 위해 사용한다.
const win = new BrowserWindow()
win.webContents.on('unresponsive', async () => {
const { response } = await dialog.showMessageBox({
message: 'App X has become unresponsive',
title: 'Do you want to try forcefully reloading the app?',
buttons: ['OK', 'Cancel'],
cancelId: 1
})
if (response === 0) {
win.webContents.forcefullyCrashRenderer()
win.webContents.reload()
}
})
contents.setUserAgent(userAgent)
userAgentstring
현재 웹 페이지의 사용자 에이전트를 재정의한다.
contents.getUserAgent()
string 타입을 반환한다. 이 웹 페이지의 사용자 에이전트(user agent)를 나타낸다.
contents.insertCSS(css[, options])
cssstring
반환 값: Promise<string> - 삽입된 CSS의 고유 키를 반환하는 Promise. 이 키는 나중에 contents.removeInsertedCSS(key)를 통해 CSS를 제거하는 데 사용할 수 있다.
현재 웹 페이지에 CSS를 주입하고, 삽입된 스타일시트에 대한 고유 키를 반환한다.
const win = new BrowserWindow()
win.webContents.on('did-finish-load', () => {
win.webContents.insertCSS('html, body { background-color: #f00; }')
})
contents.removeInsertedCSS(key)
keystring
Promise<void>를 반환한다. CSS 제거가 성공하면 resolve된다.
현재 웹 페이지에서 삽입된 CSS를 제거한다. 스타일시트는 contents.insertCSS(css)에서 반환된 키로 식별된다.
const win = new BrowserWindow()
win.webContents.on('did-finish-load', async () => {
const key = await win.webContents.insertCSS('html, body { background-color: #f00; }')
win.webContents.removeInsertedCSS(key)
})
contents.executeJavaScript(code[, userGesture])
codestringuserGestureboolean (선택 사항) - 기본값은false.
반환값: Promise<any> - 실행된 코드의 결과로 resolve되거나, 코드의 결과가 rejected Promise인 경우 reject되는 Promise.
페이지에서 code를 실행한다.
브라우저 윈도우에서 requestFullScreen과 같은 일부 HTML API는 사용자의 제스처가 있어야만 호출할 수 있다. userGesture를 true로 설정하면 이 제한을 해제할 수 있다.
코드 실행은 웹 페이지가 로딩을 멈출 때까지 중단된다.
const win = new BrowserWindow()
win.webContents.executeJavaScript('fetch("https://jsonplaceholder.typicode.com/users/1").then(resp => resp.json())', true)
.then((result) => {
console.log(result) // fetch 호출의 JSON 객체가 출력된다
})
contents.executeJavaScriptInIsolatedWorld(worldId, scripts[, userGesture])
worldIdInteger - 자바스크립트를 실행할 세계의 ID.0은 기본 세계이며,999는 Electron의contextIsolation기능에서 사용하는 세계이다. 여기에는 어떤 정수든 입력할 수 있다.scriptsWebSource[]userGestureboolean (선택 사항) - 기본값은false.
Promise<any>를 반환한다. 실행된 코드의 결과로 이행되거나, 코드의 결과가 거부된 Promise인 경우 거부된다.
executeJavaScript와 유사하게 동작하지만, scripts를 격리된 컨텍스트에서 평가한다.
contents.setIgnoreMenuShortcuts(ignore)
ignoreboolean
이 웹 콘텐츠가 포커스 상태일 때 애플리케이션 메뉴 단축키를 무시한다.
contents.setWindowOpenHandler(handler)
-
handlerFunction<WindowOpenHandlerResponse>detailsObjecturlstring -window.open()에 전달된 URL의 해석된 버전. 예를 들어window.open('foo')로 윈도우를 열면https://the-origin/the/current/path/foo와 같은 URL이 생성된다.frameNamestring -window.open()에 제공된 윈도우의 이름.featuresstring -window.open()에 제공된 윈도우 기능의 쉼표로 구분된 목록.dispositionstring -default,foreground-tab,background-tab,new-window,other중 하나.referrerReferrer - 새 윈도우에 전달될 리퍼러. 리퍼러 정책에 따라Referer헤더가 전송될 수도 있고, 전송되지 않을 수도 있다.postBodyPostBody (선택 사항) - 새 윈도우에 전송될 POST 데이터와 함께 설정될 적절한 헤더. 전송할 POST 데이터가 없으면 값은null이 된다.target=_blank로 설정된 폼에 의해 윈도우가 생성될 때만 정의된다.
Returns
WindowOpenHandlerResponse-{ action: 'deny' }로 설정하면 새 윈도우 생성을 취소한다.{ action: 'allow' }로 설정하면 새 윈도우 생성을 허용한다. 인식할 수 없는 값(예: null, undefined, 또는 'action' 값이 없는 객체)을 반환하면 콘솔에 오류가 발생하고{action: 'deny'}를 반환한 것과 동일한 효과가 발생한다.
렌더러가 새 윈도우를 요청할 때 호출된다. 예를 들어 window.open(), target="_blank"가 설정된 링크, 링크를 Shift+클릭하거나 <form target="_blank">로 폼을 제출할 때 호출된다. 자세한 내용과 did-create-window와 함께 사용하는 방법은 window.open()을 참조한다.
새 BrowserWindow 생성 과정을 커스텀화하여 메인 윈도우에 BrowserView를 부착하는 예제:
const { BrowserView, BrowserWindow } = require('electron')
const mainWindow = new BrowserWindow()
mainWindow.webContents.setWindowOpenHandler((details) => {
return {
action: 'allow',
createWindow: (options) => {
const browserView = new BrowserView(options)
mainWindow.addBrowserView(browserView)
browserView.setBounds({ x: 0, y: 0, width: 640, height: 480 })
return browserView.webContents
}
}
})
contents.setAudioMuted(muted)
mutedboolean
현재 웹 페이지의 오디오를 음소거한다.
contents.isAudioMuted()
boolean을 반환한다. 해당 페이지가 음소거 상태인지 여부를 나타낸다.
contents.isCurrentlyAudible()
boolean을 반환한다. 현재 오디오가 재생 중인지 여부를 나타낸다.
contents.setZoomFactor(factor)
factorDouble - 확대/축소 비율; 기본값은 1.0이다.
지정한 비율로 확대/축소 비율을 변경한다. 확대/축소 비율은 확대 비율을 100으로 나눈 값이므로, 300%는 3.0이 된다.
비율은 반드시 0.0보다 커야 한다.
contents.getZoomFactor()
number 타입의 현재 줌 배율을 반환한다.
contents.setZoomLevel(level)
levelnumber - 줌 레벨
지정된 줌 레벨로 변경한다. 원본 크기는 0이며, 0보다 큰 값은 20%씩 확대되고, 작은 값은 20%씩 축소된다. 기본 제한은 원본 크기의 300%와 50%이다. 이 계산 공식은 scale := 1.2 ^ level이다.
참고: Chromium 수준의 줌 정책은 동일 출처(same-origin)를 기준으로 한다. 즉, 특정 도메인의 줌 레벨은 동일한 도메인의 모든 윈도우 인스턴스에 전파된다. 윈도우 URL을 다르게 설정하면 윈도우별로 줌이 작동한다.
contents.getZoomLevel()
number 타입의 값을 반환한다. 현재의 줌 레벨을 나타낸다.
contents.setVisualZoomLevelLimits(minimumLevel, maximumLevel)
minimumLevelnumbermaximumLevelnumber
Promise<void>를 반환한다.
핀치 투 줌의 최소 및 최대 줌 레벨을 설정한다.
참고: Electron에서는 기본적으로 시각적 줌이 비활성화되어 있다. 다시 활성화하려면 다음 코드를 호출한다:
const win = new BrowserWindow()
win.webContents.setVisualZoomLevelLimits(1, 3)
contents.undo()
웹 페이지에서 편집 명령어 undo를 실행한다.
contents.redo()
웹 페이지에서 편집 명령어 redo를 실행한다.
contents.cut()
웹 페이지에서 편집 커맨드 cut을 실행한다.
contents.copy()
웹 페이지에서 copy 편집 커맨드를 실행한다.
contents.centerSelection()
현재 웹 페이지에서 선택된 텍스트를 가운데 정렬한다.
contents.copyImageAt(x, y)
x정수y정수
주어진 위치에 있는 이미지를 클립보드로 복사한다.
contents.paste()
웹 페이지에서 paste 편집 커맨드를 실행한다.
contents.pasteAndMatchStyle()
웹 페이지에서 pasteAndMatchStyle 편집 명령을 실행한다.
contents.delete()
웹 페이지에서 delete 편집 명령을 실행한다.
contents.selectAll()
웹 페이지에서 selectAll 편집 커맨드를 실행한다.
contents.unselect()
웹 페이지에서 unselect 편집 커맨드를 실행한다.
contents.scrollToTop()
현재 webContents의 맨 위로 스크롤한다.
contents.scrollToBottom()
현재 webContents의 맨 아래로 스크롤한다.
contents.adjustSelection(options)
포커스된 프레임 내에서 현재 텍스트 선택 영역의 시작점과 끝점을 지정된 양만큼 조정한다. 음수 값을 사용하면 선택 영역이 문서의 시작 부분으로 이동하고, 양수 값을 사용하면 선택 영역이 문서의 끝 부분으로 이동한다.
예제:
const win = new BrowserWindow()
// 선택 영역의 시작점을 1글자 앞으로 이동하고,
// 선택 영역의 끝점을 5글자 앞으로 이동한다.
win.webContents.adjustSelection({ start: 1, end: 5 })
// 선택 영역의 시작점을 2글자 앞으로 이동하고,
// 선택 영역의 끝점을 3글자 뒤로 이동한다.
win.webContents.adjustSelection({ start: 2, end: -3 })
win.webContents.adjustSelection({ start: 1, end: 5 }) 호출 시
이전:
이후:
contents.replace(text)
text문자열
웹 페이지에서 replace 편집 커맨드를 실행한다.
contents.replaceMisspelling(text)
textstring
웹 페이지에서 replaceMisspelling 편집 커맨드를 실행한다.
contents.insertText(text)
textstring
Promise<void>를 반환한다.
포커스된 엘리먼트에 text를 삽입한다.
contents.findInPage(text[, options])
textstring - 검색할 내용으로, 비어 있으면 안 된다.
Returns Integer - 요청에 사용된 요청 ID를 반환한다.
웹 페이지에서 text와 일치하는 모든 항목을 찾기 위한 요청을 시작한다. 요청 결과는 found-in-page 이벤트를 구독하여 얻을 수 있다.
contents.stopFindInPage(action)
actionstring -webContents.findInPage요청을 종료할 때 수행할 동작을 지정한다.clearSelection- 선택 영역을 지운다.keepSelection- 선택 영역을 일반 선택으로 변환한다.activateSelection- 선택된 노드에 포커스를 맞추고 클릭한다.
제공된 action으로 webContents에 대한 모든 findInPage 요청을 중지한다.
const win = new BrowserWindow()
win.webContents.on('found-in-page', (event, result) => {
if (result.finalUpdate) win.webContents.stopFindInPage('clearSelection')
})
const requestId = win.webContents.findInPage('api')
console.log(requestId)
contents.capturePage([rect, opts])
rectRectangle (선택 사항) - 캡처할 페이지의 영역을 지정한다.optsObject (선택 사항)stayHiddenboolean (선택 사항) - 페이지를 보이지 않게 유지한다. 기본값은false이다.stayAwakeboolean (선택 사항) - 시스템이 슬립 모드로 들어가지 않게 유지한다. 기본값은false이다.
Promise<NativeImage>를 반환한다 - NativeImage로 resolve된다.
rect 영역 내의 페이지 스냅샷을 캡처한다. rect를 생략하면 전체 보이는 페이지를 캡처한다.
브라우저 윈도우가 숨겨져 있고 캡처 카운트가 0이 아닌 경우 페이지는 보이는 것으로 간주된다.
페이지를 숨겨진 상태로 유지하려면 stayHidden을 true로 설정해야 한다.
contents.isBeingCaptured()
boolean 값을 반환한다. 이 메서드는 현재 페이지가 캡처 중인지 여부를 나타낸다. 캡처 카운트가 0보다 크면 true를 반환한다.
contents.getPrintersAsync()
시스템 프린터 목록을 가져온다.
반환 값
Promise<PrinterInfo[]> - PrinterInfo[]로 해소된다.
contents.print([options], [callback])
callbackFunction (선택 사항)successboolean - 프린트 호출의 성공 여부를 나타낸다.failureReasonstring - 프린트가 실패한 경우 반환되는 오류 설명.
커스텀 pageSize를 전달하면 Chromium은 width_microns와 height_microns에 대한 플랫폼별 최소값을 검증하려고 시도한다. 너비와 높이는 최소 353 마이크론이어야 하며, 일부 운영체제에서는 더 높을 수 있다.
윈도우의 웹 페이지를 출력한다. silent가 true로 설정된 경우, deviceName이 비어 있으면 Electron은 시스템의 기본 프린터와 기본 프린트 설정을 사용한다.
page-break-before: always; CSS 스타일을 사용하면 새로운 페이지로 강제로 출력할 수 있다.
예제 사용법:
const win = new BrowserWindow()
const options = {
silent: true,
deviceName: 'My-Printer',
pageRanges: [{
from: 0,
to: 1
}]
}
win.webContents.print(options, (success, errorType) => {
if (!success) console.log(errorType)
})
contents.printToPDF(options)
반환값 Promise<Buffer> - 생성된 PDF 데이터로 이행.
윈도우의 웹 페이지를 PDF로 출력.
웹 페이지에서 @page CSS at-rule을 사용할 경우 landscape는 무시.
webContents.printToPDF 예제:
const { app, BrowserWindow } = require('electron')
const fs = require('node:fs')
const path = require('node:path')
const os = require('node:os')
app.whenReady().then(() => {
const win = new BrowserWindow()
win.loadURL('https://github.com')
win.webContents.on('did-finish-load', () => {
// 기본 프린트 옵션 사용
const pdfPath = path.join(os.homedir(), 'Desktop', 'temp.pdf')
win.webContents.printToPDF({}).then(data => {
fs.writeFile(pdfPath, data, (error) => {
if (error) throw error
console.log(`Wrote PDF successfully to ${pdfPath}`)
})
}).catch(error => {
console.log(`Failed to write PDF to ${pdfPath}: `, error)
})
})
})
더 많은 정보는 Page.printToPdf를 참고.
contents.addWorkSpace(path)
pathstring
지정된 경로를 DevTools 작업 공간에 추가한다. DevTools 생성 후에 사용해야 한다:
const { BrowserWindow } = require('electron')
const win = new BrowserWindow()
win.webContents.on('devtools-opened', () => {
win.webContents.addWorkSpace(__dirname)
})
contents.removeWorkSpace(path)
pathstring
DevTools 작업 공간에서 지정된 경로를 제거한다.
contents.setDevToolsWebContents(devToolsWebContents)
devToolsWebContentsWebContents
devToolsWebContents를 대상 WebContents로 사용하여 개발자 도구를 표시한다.
devToolsWebContents는 네비게이션을 수행한 적이 없어야 하며, 이 메서드 호출 후 다른 용도로 사용해서는 안 된다.
기본적으로 Electron은 네이티브 뷰를 가진 내부 WebContents를 생성하여 개발자 도구를 관리한다. 이 경우 개발자가 제어할 수 있는 부분이 매우 제한적이다. setDevToolsWebContents 메서드를 사용하면 BrowserWindow, BrowserView, <webview> 태그 등 어떤 WebContents든 개발자 도구를 표시할 수 있다.
개발자 도구를 닫아도 devToolsWebContents가 파괴되지 않는다. devToolsWebContents를 파괴하는 것은 호출자의 책임이다.
<webview> 태그에 개발자 도구를 표시하는 예제:
<html>
<head>
<style type="text/css">
* { margin: 0; }
#browser { height: 70%; }
#devtools { height: 30%; }
</style>
</head>
<body>
<webview id="browser" src="https://github.com"></webview>
<webview id="devtools" src="about:blank"></webview>
<script>
const { ipcRenderer } = require('electron')
const emittedOnce = (element, eventName) => new Promise(resolve => {
element.addEventListener(eventName, event => resolve(event), { once: true })
})
const browserView = document.getElementById('browser')
const devtoolsView = document.getElementById('devtools')
const browserReady = emittedOnce(browserView, 'dom-ready')
const devtoolsReady = emittedOnce(devtoolsView, 'dom-ready')
Promise.all([browserReady, devtoolsReady]).then(() => {
const targetId = browserView.getWebContentsId()
const devtoolsId = devtoolsView.getWebContentsId()
ipcRenderer.send('open-devtools', targetId, devtoolsId)
})
</script>
</body>
</html>
// 메인 프로세스
const { ipcMain, webContents } = require('electron')
ipcMain.on('open-devtools', (event, targetContentsId, devtoolsContentsId) => {
const target = webContents.fromId(targetContentsId)
const devtools = webContents.fromId(devtoolsContentsId)
target.setDevToolsWebContents(devtools)
target.openDevTools()
})
BrowserWindow에 개발자 도구를 표시하는 예제:
const { app, BrowserWindow } = require('electron')
let win = null
let devtools = null
app.whenReady().then(() => {
win = new BrowserWindow()
devtools = new BrowserWindow()
win.loadURL('https://github.com')
win.webContents.setDevToolsWebContents(devtools.webContents)
win.webContents.openDevTools({ mode: 'detach' })
})
contents.openDevTools([options])
개발자 도구를 연다.
contents가 <webview> 태그인 경우, mode는 기본적으로 detach로 설정된다. 명시적으로 빈 mode를 전달하면 마지막으로 사용한 도크 상태를 강제로 사용할 수 있다.
윈도우에서 Windows Control Overlay가 활성화된 경우, 개발자 도구는 mode: 'detach'로 열린다.
contents.closeDevTools()는 개발자 도구를 닫는다.
contents.isDevToolsOpened()
boolean을 반환한다. 개발자 도구가 열려 있는지 여부를 나타낸다.
contents.isDevToolsFocused()
boolean을 반환한다. 개발자 도구 뷰가 현재 포커스를 가지고 있는지 여부를 나타낸다.
contents.getDevToolsTitle()
string을 반환한다. 이 값은 DevTools 윈도우의 현재 제목을 나타낸다. DevTools가 undocked 또는 detach 모드로 열려 있을 때만 이 제목이 표시된다.
contents.setDevToolsTitle(title)
titlestring
DevTools 윈도우의 제목을 title로 변경한다. 이 기능은 DevTools가 undocked 또는 detach 모드로 열려 있을 때만 적용된다.
contents.toggleDevTools()
개발자 도구를 토글한다.
contents.inspectElement(x, y)
xIntegeryInteger
(x, y) 위치에 있는 엘리먼트를 검사하기 시작한다.
contents.inspectSharedWorker()
공유 워커 컨텍스트에 대한 개발자 도구를 연다.
contents.inspectSharedWorkerById(workerId)
workerIdstring
주어진 ID를 기반으로 공유 워커(shared worker)를 검사한다.
contents.getAllSharedWorkers()
SharedWorkerInfo[] 타입의 값을 반환한다. 이는 모든 Shared Worker에 대한 정보를 담고 있다.
contents.inspectServiceWorker()
서비스 워커 컨텍스트에 대한 개발자 도구를 열어준다.
contents.send(channel, ...args)
channelstring...argsany[]
channel을 통해 렌더러 프로세스로 비동기 메시지를 보낸다. 이때 추가 인자를 함께 전달할 수 있다. 인자는 postMessage와 동일하게 Structured Clone Algorithm을 사용해 직렬화된다. 따라서 프로토타입 체인은 포함되지 않는다. 함수, Promise, Symbol, WeakMap, WeakSet을 전송하려고 하면 예외가 발생한다.
DOM 객체나 Electron의 특수 객체와 같은 비표준 자바스크립트 타입을 전송하려고 하면 예외가 발생한다.
더 자세한 내용은 Electron의 IPC 가이드를 참고한다.
contents.sendToFrame(frameId, channel, ...args)
frameIdInteger | [number, number] - 메인 프레임과 다른 프로세스에 있는 프레임이라면[processId, frameId]쌍으로, 그렇지 않으면 프레임 ID를 지정한다.channelstring...argsany[]
channel을 통해 렌더러 프로세스의 특정 프레임으로 비동기 메시지를 보낸다. 인자는 postMessage와 동일하게 Structured Clone Algorithm로 직렬화되며, 프로토타입 체인은 포함되지 않는다. 함수, Promise, Symbol, WeakMap, WeakSet을 보내면 예외가 발생한다.
참고: DOM 객체나 특수 Electron 객체와 같은 비표준 자바스크립트 타입을 보내면 예외가 발생한다.
렌더러 프로세스는 ipcRenderer 모듈을 사용해 channel을 수신하여 메시지를 처리할 수 있다.
특정 렌더러 컨텍스트의 frameId를 얻으려면 webFrame.routingId 값을 사용한다. 예를 들어:
// 렌더러 프로세스에서
console.log('내 프레임 ID는:', require('electron').webFrame.routingId)
메인 프로세스에서는 모든 수신 IPC 메시지에서 frameId를 읽을 수도 있다.
// 메인 프로세스에서
ipcMain.on('ping', (event) => {
console.info('메시지가 온 프레임 ID:', event.frameId)
})
contents.postMessage(channel, message, [transfer])
channelstringmessageanytransferMessagePortMain[] (선택 사항)
렌더러 프로세스로 메시지를 보내며, 선택적으로 하나 이상의 MessagePortMain 객체의 소유권을 이전한다.
이전된 MessagePortMain 객체는 렌더러 프로세스에서 이벤트의 ports 속성에 접근하여 사용할 수 있다. 렌더러 프로세스에 도착하면 이 객체는 네이티브 DOM MessagePort 객체가 된다.
예시:
// 메인 프로세스
const win = new BrowserWindow()
const { port1, port2 } = new MessageChannelMain()
win.webContents.postMessage('port', { message: 'hello' }, [port1])
// 렌더러 프로세스
ipcRenderer.on('port', (e, msg) => {
const [port] = e.ports
// ...
})
contents.enableDeviceEmulation(parameters)
parametersObjectscreenPositionstring - 에뮬레이션할 화면 타입을 지정한다 (기본값:desktop):desktop- 데스크톱 화면 타입.mobile- 모바일 화면 타입.
screenSizeSize - 에뮬레이션할 화면 크기를 설정한다 (screenPosition == mobile).viewPositionPoint - 화면 상에서 뷰의 위치를 설정한다 (screenPosition == mobile) (기본값:{ x: 0, y: 0 }).deviceScaleFactorInteger - 장치 스케일 팩터를 설정한다 (0이면 기본 장치 스케일 팩터를 사용) (기본값:0).viewSizeSize - 에뮬레이션할 뷰 크기를 설정한다 (비어 있으면 오버라이드하지 않음)scaleFloat - 사용 가능한 공간 내에서 에뮬레이션된 뷰의 스케일을 설정한다 (fit to view 모드가 아님) (기본값:1).
주어진 파라미터로 장치 에뮬레이션을 활성화한다.
contents.disableDeviceEmulation()
webContents.enableDeviceEmulation로 활성화된 디바이스 에뮬레이션을 비활성화한다.
contents.sendInputEvent(inputEvent)
inputEventMouseInputEvent | MouseWheelInputEvent | KeyboardInputEvent
페이지에 입력 이벤트를 전송한다.
참고: sendInputEvent()가 동작하려면 BrowserWindow가 포커스 상태여야 한다.
contents.beginFrameSubscription([onlyDirty ,]callback)
onlyDirtyboolean (선택 사항) - 기본값은false.callbackFunctionimageNativeImagedirtyRectRectangle
프레젠테이션 이벤트와 캡처된 프레임을 구독하기 시작한다. 프레젠테이션 이벤트가 발생하면 callback(image, dirtyRect) 형태로 콜백 함수가 호출된다.
image는 캡처된 프레임을 저장하는 NativeImage의 인스턴스다.
dirtyRect는 페이지에서 다시 그려진 부분을 설명하는 x, y, width, height 속성을 가진 객체다. onlyDirty가 true로 설정되면 image는 다시 그려진 영역만 포함한다. onlyDirty의 기본값은 false다.
contents.endFrameSubscription()
프레임 프레젠테이션 이벤트 구독을 종료한다.
contents.startDrag(item)
itemObjectfilestring - 드래그할 파일의 경로filesstring[] (선택 사항) - 드래그할 파일들의 경로. (files는file필드를 덮어쓴다)iconNativeImage | string - 드래그 시 커서 아래에 표시될 이미지. macOS에서는 반드시 비어 있지 않아야 한다.
현재 드래그 앤 드롭 작업에서 item을 드래그 항목으로 설정한다. file은 드래그할 파일의 절대 경로이고, icon은 드래그 시 커서 아래에 표시될 이미지다.
contents.savePage(fullPath, saveType)
fullPathstring - 파일의 절대 경로saveTypestring - 저장 타입 지정HTMLOnly- 페이지의 HTML만 저장HTMLComplete- 완전한 HTML 페이지 저장MHTML- 완전한 HTML 페이지를 MHTML 형식으로 저장
반환값: Promise<void> - 페이지가 저장되면 resolve
const { BrowserWindow } = require('electron')
const win = new BrowserWindow()
win.loadURL('https://github.com')
win.webContents.on('did-finish-load', async () => {
win.webContents.savePage('/tmp/test.html', 'HTMLComplete').then(() => {
console.log('Page was saved successfully.')
}).catch(err => {
console.log(err)
})
})
contents.showDefinitionForSelection() macOS
페이지에서 선택한 단어를 검색하는 팝업 사전을 표시한다.
contents.isOffscreen()
boolean 타입을 반환한다. 현재 _오프스크린 렌더링_이 활성화되어 있는지 여부를 나타낸다.
contents.startPainting()
_오프스크린 렌더링_이 활성화되어 있고 현재 렌더링 중이 아니라면, 렌더링을 시작한다.
contents.stopPainting()은 _오프스크린 렌더링_이 활성화되어 있고, 현재 렌더링 중인 경우 렌더링을 중지한다.
contents.isPainting()는 _오프스크린 렌더링_이 활성화된 경우 현재 페인팅 중인지 여부를 boolean 값으로 반환한다.
contents.setFrameRate(fps)
fpsInteger
오프스크린 렌더링이 활성화된 경우, 프레임 속도를 지정된 값으로 설정한다. 1부터 240 사이의 값만 허용된다.
contents.getFrameRate()
Integer를 반환한다. _오프스크린 렌더링_이 활성화된 경우 현재 프레임 속도를 반환한다.
contents.invalidate()
이 메서드는 현재 웹 콘텐츠가 표시된 윈도우의 전체 리페인트를 예약한다.
_오프스크린 렌더링_이 활성화된 경우, 프레임을 무효화하고 'paint' 이벤트를 통해 새로운 프레임을 생성한다.
contents.getWebRTCIPHandlingPolicy()
string을 반환한다. 현재 설정된 WebRTC IP 처리 정책을 반환한다.
contents.setWebRTCIPHandlingPolicy(policy)
policystring - WebRTC IP 처리 정책을 지정한다.default- 사용자의 공개 IP와 로컬 IP를 모두 노출한다. 이는 기본 동작이다. 이 정책을 사용하면 WebRTC가 모든 인터페이스를 열거하고 공개 인터페이스를 탐색하기 위해 바인딩할 수 있다.default_public_interface_only- 사용자의 공개 IP는 노출하지만 로컬 IP는 노출하지 않는다. 이 정책을 사용하면 WebRTC는 http에서 사용하는 기본 경로만 사용해야 한다. 이 경우 로컬 주소는 노출되지 않는다.default_public_and_private_interfaces- 사용자의 공개 IP와 로컬 IP를 모두 노출한다. 이 정책을 사용하면 WebRTC는 http에서 사용하는 기본 경로만 사용해야 한다. 또한 연관된 기본 프라이빗 주소도 노출한다. 기본 경로는 다중 홈 엔드포인트에서 OS가 선택한 경로이다.disable_non_proxied_udp- 공개 IP와 로컬 IP를 모두 노출하지 않는다. 이 정책을 사용하면 WebRTC는 프록시 서버가 UDP를 지원하지 않는 한 피어나 서버와 통신할 때 TCP만 사용해야 한다.
WebRTC IP 처리 정책을 설정하면 WebRTC를 통해 어떤 IP가 노출되는지 제어할 수 있다. 더 자세한 내용은 BrowserLeaks를 참고한다.
contents.getWebRTCUDPPortRange()
Object를 반환한다:
minInteger - WebRTC가 사용해야 하는 최소 UDP 포트 번호maxInteger - WebRTC가 사용해야 하는 최대 UDP 포트 번호
기본값은 { min: 0, max: 0 }로, 이 경우 UDP 포트 범위에 제한이 적용되지 않는다.
contents.setWebRTCUDPPortRange(udpPortRange)
udpPortRange객체min정수 - WebRTC가 사용할 최소 UDP 포트 번호max정수 - WebRTC가 사용할 최대 UDP 포트 번호
WebRTC UDP 포트 범위를 설정하면 WebRTC가 사용할 UDP 포트 범위를 제한할 수 있다. 기본적으로 포트 범위는 제한되지 않는다.
참고: 제한 없는 포트 범위로 재설정하려면 이 값을 { min: 0, max: 0 }으로 설정해야 한다.
contents.getMediaSourceId(requestWebContents)
requestWebContentsWebContents - 미디어 소스 ID가 등록될 WebContents
string을 반환 - WebContents 스트림의 식별자. 이 식별자는 chromeMediaSource를 tab으로 설정한 navigator.mediaDevices.getUserMedia와 함께 사용할 수 있다. 이 식별자는 등록된 WebContents로 제한되며 10초 동안만 유효하다.
contents.getOSProcessId()
Integer를 반환한다. 이는 연결된 렌더러 프로세스의 운영체제 pid를 나타낸다.
contents.getProcessId()
Integer 타입의 값을 반환한다. 이 값은 연관된 렌더러의 Chromium 내부 pid를 나타낸다. 이 값은 프레임별 네비게이션 이벤트(예: did-frame-navigate)에서 전달되는 frameProcessId와 비교할 수 있다.
contents.takeHeapSnapshot(filePath)
filePathstring - 출력 파일 경로
Returns Promise<void> - 스냅샷 생성 성공 여부를 나타냄
V8 힙 스냅샷을 생성하고 filePath에 저장한다.
contents.getBackgroundThrottling()
boolean 타입을 반환한다. 이 메서드는 페이지가 백그라운드 상태가 되었을 때, 해당 WebContents가 애니메이션과 타이머를 제한할지 여부를 나타낸다. 이 설정은 Page Visibility API에도 영향을 미친다.
contents.setBackgroundThrottling(allowed)
History
allowedboolean
페이지가 백그라운드 상태가 되었을 때 애니메이션과 타이머를 제한할지 여부를 설정한다. 이 설정은 Page Visibility API에도 영향을 미친다.
contents.getType()
string 타입을 반환한다. 웹 콘텐츠의 타입을 나타내며, backgroundPage, window, browserView, remote, webview, offscreen 중 하나의 값을 가진다.
contents.setImageAnimationPolicy(policy)
policystring -animate,animateOnce, 또는noAnimation중 하나로 설정 가능.
이 메서드는 현재 웹 콘텐츠의 이미지 애니메이션 정책을 설정한다. 이 정책은 새로운 이미지에만 적용되며, 이미 애니메이션이 진행 중인 기존 이미지에는 영향을 미치지 않는다. 이는 크로미움의 알려진 제한 사항이다. img.src = img.src를 사용하면 네트워크 트래픽 없이 이미지 애니메이션을 다시 계산할 수 있으며, 이 경우 애니메이션 정책이 업데이트된다.
이 기능은 크로미움의 animationPolicy 접근성 기능과 대응된다.
인스턴스 속성
contents.ipc 읽기 전용
이 WebContents에서 전송된 IPC 메시지에만 적용되는 IpcMain 범위를 가진다.
ipcRenderer.send, ipcRenderer.sendSync, ipcRenderer.postMessage로 전송된 IPC 메시지는 다음 순서로 전달된다:
contents.on('ipc-message')contents.mainFrame.on(channel)contents.ipc.on(channel)ipcMain.on(channel)
invoke로 등록된 핸들러는 다음 순서로 확인된다. 첫 번째로 정의된 핸들러가 호출되며, 나머지는 무시된다.
contents.mainFrame.handle(channel)contents.handle(channel)ipcMain.handle(channel)
WebContents에 등록된 핸들러나 이벤트 리스너는 자식 프레임을 포함한 모든 프레임에서 전송된 IPC 메시지를 받는다. 대부분의 경우 메인 프레임만 IPC 메시지를 보낼 수 있다. 하지만 nodeIntegrationInSubFrames 옵션이 활성화된 경우, 자식 프레임도 IPC 메시지를 보낼 수 있다. 이 경우 핸들러는 IPC 이벤트의 senderFrame 속성을 확인해 메시지가 예상된 프레임에서 왔는지 확인해야 한다. 또는 WebFrameMain.ipc 인터페이스를 사용해 적절한 프레임에 직접 핸들러를 등록할 수도 있다.
contents.audioMuted
이 속성은 boolean 타입으로, 현재 페이지의 음소거 상태를 결정한다.
contents.userAgent
이 속성은 웹 페이지의 사용자 에이전트(user agent)를 결정하는 문자열(string) 타입의 속성이다.
contents.zoomLevel
이 속성은 웹 콘텐츠의 확대/축소 수준을 결정하는 number 타입의 값이다.
기본 크기는 0이며, 이 값을 기준으로 증가 또는 감소할 때마다 20%씩 확대 또는 축소된다. 확대의 기본 상한은 원래 크기의 300%, 축소의 기본 하한은 원래 크기의 50%이다. 이 수준은 scale := 1.2 ^ level 공식으로 계산된다.
contents.zoomFactor
이 속성은 웹 콘텐츠의 확대/축소 비율을 결정하는 number 타입의 값이다.
확대/축소 비율은 퍼센트 값을 100으로 나눈 값으로, 예를 들어 300%는 3.0으로 표현된다.
contents.frameRate
contents.frameRate는 웹 콘텐츠의 프레임 속도를 지정된 숫자로 설정하는 정수형(Integer) 프로퍼티이다. 이 값은 1부터 240 사이의 범위에서만 유효하다.
이 기능은 _오프스크린 렌더링(offscreen rendering)_이 활성화된 경우에만 적용된다.
contents.id 읽기 전용
이 WebContents의 고유 ID를 나타내는 Integer 값이다. 이 ID는 전체 Electron 애플리케이션 내의 모든 WebContents 인스턴스에서 유일하다.
contents.session 읽기 전용
이 webContents에서 사용하는 Session을 나타낸다.
contents.navigationHistory Readonly
이 webContents가 사용하는 NavigationHistory 객체이다.
contents.hostWebContents 읽기 전용
이 WebContents를 소유할 수 있는 WebContents 인스턴스이다.
contents.devToolsWebContents 읽기 전용
주어진 WebContents와 연결된 DevTools WebContents를 나타내는 WebContents | null 타입의 프로퍼티이다.
참고: 사용자는 이 객체를 절대 저장해서는 안 된다. DevTools가 닫히면 이 객체가 null이 될 수 있기 때문이다.
contents.debugger 읽기 전용
이 webContents에 대한 Debugger 인스턴스를 나타낸다.
contents.backgroundThrottling
History
이 속성은 boolean 타입으로, 페이지가 백그라운드 상태가 될 때 애니메이션과 타이머를 제한할지 여부를 결정한다. 이 설정은 Page Visibility API에도 영향을 미친다.
contents.mainFrame Readonly
WebFrameMain 타입의 프로퍼티로, 페이지 프레임 계층 구조의 최상위 프레임을 나타낸다.
contents.opener 읽기 전용
이 WebContents를 연 프레임을 나타내는 WebFrameMain 프로퍼티다. open() 메서드를 사용하거나 target 속성이 있는 링크를 통해 네비게이션한 경우에 해당한다.