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-navigation
will-frame-navigate
will-navigate
(メインフレームがナビゲーションするときのみ発生します)will-redirect
(ナビゲーション中にリダイレクトされるときのみ発生します)did-redirect-navigation
(ナビゲーション中にリダイレクトされたときのみ発生します)did-frame-navigate
did-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)
id
Integer
戻り値 WebContents | undefined
- 指定 ID の WebContents インスタンス。指定 ID に関連付けられた WebContents が存在しない場合は undefined
です。
webContents.fromFrame(frame)
frame
WebFrameMain
戻り値 WebContents | undefined
- 指定 WebFrameMain の WebContents インスタンス。指定の WebFrameMain に関連付けられた WebContents が存在しない場合は undefined
です。
webContents.fromDevToolsTargetId(targetId)
targetId
string - WebContents インスタンスに関連付けられた Chrome デベロッパー ツールプロトコルの TargetID。
戻り値 WebContents | undefined
- 指定 TargetID の WebContents インスタンス。指定 TargetID に関連付けられた WebContents が存在しない場合は undefined
です。
Chrome デベロッパー ツールプロトコル と通信する際に、割り当てられた 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'
戻り値:
event
EventerrorCode
IntegererrorDescription
stringvalidatedURL
stringisMainFrame
booleanframeProcessId
IntegerframeRoutingId
Integer
このイベントは did-finish-load
に似ていますが、ロードが失敗したときも発行されます。 エラーコードとその意味のすべてのリストは こちら です。
イベント: 'did-fail-provisional-load'
戻り値:
event
EventerrorCode
IntegererrorDescription
stringvalidatedURL
stringisMainFrame
booleanframeProcessId
IntegerframeRoutingId
Integer
このイベントは did-fail-load
に似ていますが、ロードがキャンセルされたときに発行されます (例えば window.stop()
が呼び出されたときなど)。
イベント: 'did-frame-finish-load'
戻り値:
event
EventisMainFrame
booleanframeProcessId
IntegerframeRoutingId
Integer
フレームのナビ ゲーションが終了したときに発行されます。
イベント: 'did-start-loading'
タブのくるくるが始まったタイミングに対応しています。
イベント: 'did-stop-loading'
タブのくるくるが止まったタイミングに対応しています。
イベント: 'dom-ready'
最上位フレームの document が読み込まれたときに発生します。
イベント: 'page-title-updated'
戻り値:
event
Eventtitle
stringexplicitSet
boolean
ナビゲーション中にページタイトルが設定されると発生します。 explicitSet
は、タイトルがファイル URL から合成されている場合に false になりま す。
イベント: 'page-favicon-updated'
戻り値:
event
Eventfavicons
string[] - URLの配列。
ページがファビコンの URL を受け取ると発行されます。
イベント: 'content-bounds-updated'
戻り値:
event
Eventbounds
Rectangle - 要求された新しいコンテンツ領域
ページが window.moveTo
、 window.resizeTo
、または関連する API を呼び出すときに発生します。
デフォルトでは、これによりウインドウを動かします。 その動作を阻害するには、event.preventDefault()
を呼び出してください。
イベント: 'did-create-window'
戻り値:
window
BrowserWindowdetails
Objecturl
string - 作成したウインドウの URL。frameName
string -window.open()
の呼び出しで作成したウインドウに指定した名前。referrer
Referrer - 新規ウインドウへ渡されるリファラ。 リファラのポリシーに応じたReferer
ヘッダーが送信されるとは限りません。postBody
PostBody (任意) - 新規ウインドウに送信される POST データと、それに伴って設定される適切なヘッダーです。 送信する POST データが無い場合、値はnull
になります。 これはtarget=_blank
を設定したフォームによってウィンドウが作成されている場合にのみセットされます。disposition
string -default
、foreground-tab
、background-tab
、new-window
、other
にできます。
レンダラーで window.open
を使用したウィンドウの作成に成功 した 後 に発生します。 webContents.setWindowOpenHandler
からウインドウの作成がキャンセルされた場合には発生しません。
詳細や webContents.setWindowOpenHandler
と併せた使用方法については window.open()
をご参照ください。
イベント: 'will-navigate'
戻り値:
details
Event<>url
string - フレームがナビゲーションしようとしている URL。isSameDocument
boolean - このイベントは、window.history API による同一ドキュメントのナビゲーションと参照フラグメントのナビゲーションでは発生しません。 このイベントでのこのプロパティは、常にfalse
がセットされています。isMainFrame
boolean - ナビゲーションがメインフレームで行われている場合は true です。frame
WebFrameMain | null - The frame to be navigated. May benull
if accessed after the frame has either navigated or been destroyed.initiator
WebFrameMain | null (optional) - The frame which initiated the navigation, which can be a parent frame (e.g. viawindow.open
with a frame's name), or null if the navigation was not initiated by a frame. イベントの発生前に開始したフレームが削除された場合も null になることがあります。
url
string 非推奨isInPlace
boolean 非推奨isMainFrame
boolean 非推奨frameProcessId
Integer 非推奨frameRoutingId
Integer 非推奨
メインフレーム上でユーザーまたはページがナビゲーションを開始しようとしたときに発生します。 window.location
オブジェクトが変更されるか、ユーザがページ内のリンクをクリックしたときに発生することがあります。
このイベントは、 webContents.loadURL
や webContents.back
のような API によって、プログラム上から開始されるナビゲーションのときには発行されません。
これは、アンカーリンクのクリックや window.location.hash
の更新のような、ページ内ナビゲーションでも発行されません。 これを意図する場合は did-navigate-in-page
を使用して下さい。
event.preventDefault()
を呼ぶとナビゲーションが阻害されます。
イベント: 'will-frame-navigate'
戻り値:
details
Event<>url
string - フレームがナビゲーションしようとしている URL。isSameDocument
boolean - このイベントは、window.history API による同一ドキュメントのナビゲーションと参照フラグメントのナビゲーションでは発生しません。 このイベントでのこのプロパティは、常にfalse
がセットされ ています。isMainFrame
boolean - ナビゲーションがメインフレームで行われている場合は true です。frame
WebFrameMain | null - The frame to be navigated. May benull
if accessed after the frame has either navigated or been destroyed.initiator
WebFrameMain | null (optional) - The frame which initiated the navigation, which can be a parent frame (e.g. viawindow.open
with a frame's name), or null if the navigation was not initiated by a frame. イベントの発生前に開始したフレームが削除された場合も 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'
戻り値:
details
Event<>url
string - フレームがナビゲーションしようとしている URL。isSameDocument
boolean - ドキュメントが変わらずにナビゲーションが行われたかどうか。 同一ドキュメントでのナビゲーションの例としては、参照フラグメントナビゲーション、pushState/replaceState、同一ページの履歴のナビゲーションなどがあります。isMainFrame
boolean - ナビゲーションがメインフレームで行われている場合は true です。frame
WebFrameMain | null - The frame to be navigated. May benull
if accessed after the frame has either navigated or been destroyed.initiator
WebFrameMain | null (optional) - The frame which initiated the navigation, which can be a parent frame (e.g. viawindow.open
with a frame's name), or null if the navigation was not initiated by a frame. イベントの発生前に開始したフレームが削除された場合も null になることがあります。
url
string 非推奨isInPlace
boolean 非推奨isMainFrame
boolean 非推奨frameProcessId
Integer 非推奨frameRoutingId
Integer 非推奨
フレーム (メインを含む) がナビゲーションを始めているときに発生します。
イベント: 'will-redirect'
戻り値:
details
Event<>url
string - フレームがナビゲーションしようとしている URL。isSameDocument
boolean - ドキュメントが変わらずにナビゲーションが行われたかどうか。 同一ドキュメントでのナビゲーションの例としては、参照フラグメントナビゲーション、pushState/replaceState、同一ページの履歴のナビゲーションなどがあります。isMainFrame
boolean - ナビゲーションがメインフレームで行われている場合は true です。frame
WebFrameMain | null - The frame to be navigated. May benull
if accessed after the frame has either navigated or been destroyed.initiator
WebFrameMain | null (optional) - The frame which initiated the navigation, which can be a parent frame (e.g. viawindow.open
with a frame's name), or null if the navigation was not initiated by a frame. イベントの発生前に開始したフレームが削除された場合も null になることがあります。
url
string 非推奨isInPlace
boolean 非推奨isMainFrame
boolean 非推奨frameProcessId
Integer 非推奨frameRoutingId
Integer 非推奨
ナビゲーション後にサーバーサイドリダイレクトが起きたときに発生します。 302 リダイレクトなどがその例です。
このイベントは常に、同一ナビゲーションで did-start-navigation
の後かつ did-redirect-navigation
イベントの前に発行されます。
event.preventDefault()
を呼ぶとナビゲーション (リダイレクトではない) が阻害されます。
イベント: 'did-redirect-navigation'
戻り値:
details
Event<>url
string - フレームがナビゲーションしようとしている URL。isSameDocument
boolean - ドキュメントが変わらずにナビゲーションが行われたかどうか。 同一ドキュメントでのナビゲーションの例としては、参照フラグメントナビゲーション、pushState/replaceState、同一ページの履歴のナビゲーションなどがあります。isMainFrame
boolean - ナビゲーションがメインフレームで行われている場合は true です。frame
WebFrameMain | null - The frame to be navigated. May benull
if accessed after the frame has either navigated or been destroyed.initiator
WebFrameMain | null (optional) - The frame which initiated the navigation, which can be a parent frame (e.g. viawindow.open
with a frame's name), or null if the navigation was not initiated by a frame. イベントの発生前に開始したフレームが削除された場合も null になることがあります。
url
string 非推奨isInPlace
boolean 非推奨isMainFrame
boolean 非推奨frameProcessId
Integer 非推奨frameRoutingId
Integer 非推奨
ナビゲーション後にサーバーサイドリダイレクトが発生すると発行されます。 302 リダイレクトなどがその例です。
このイベントを阻害することはできません。リダイレクトを防ぎたい場合は、上記の will-redirect
イベントを確認してください。
イベント: 'did-navigate'
戻り値:
event
Eventurl
stringhttpResponseCode
Integer - HTTP ナビゲーションが無い場合は-1httpStatusText
string - HTTP ナビゲーションが無い場合は空
メインフレームのナビゲーションが完了したときに発生します。
このイベントは、アンカーリンクのクリックや window.location.hash
の更新のような、ページ内ナビゲーションでは発行されません。 これを意図する場合は did-navigate-in-page
を使用して下さい。
イベント: 'did-frame-navigate'
戻り値:
event
Eventurl
stringhttpResponseCode
Integer - HTTP ナビゲーションが無い場合は-1httpStatusText
string - 非 HTTP ナビゲーションで は空です。isMainFrame
booleanframeProcessId
IntegerframeRoutingId
Integer
フレームのナビゲーションが完了したときに発生します。
このイベントは、アンカーリンクのクリックや window.location.hash
の更新のような、ページ内ナビゲーションでは発行されません。 これを意図する場合は did-navigate-in-page
を使用して下さい。
イベント: 'did-navigate-in-page'
戻り値:
event
Eventurl
stringisMainFrame
booleanframeProcessId
IntegerframeRoutingId
Integer
フレームのページ内ナビゲーションが発生したときに発生します。
ページ内ナビゲーションが行われるとき、ページのURLは変更されますがページ外でのナビゲーションは発生しません。 これが発生する例は、アンカーリンクがクリックされたときや、DOM の hashchange
イベントがトリガーされたときです。
イベント: 'will-prevent-unload'
戻り値:
event
Event
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()
}
})
注意: これは BrowserView
に対して発生しますが、尊重 されません。これは、仕様 にあるように、BrowserView
のライフサイクルはそれを所有する BrowserWindow に結び付けないとしたためです。
イベント: 'render-process-gone'
戻り値:
event
Eventdetails
RenderProcessGoneDetails
renderer processが予期せず消えたときに発生します。 プロセスがクラッシュした場合やキルされた場合は正常です。
イベント: 'unresponsive'
Webページが応答しなくなるときに発生します。
イベント: 'responsive'
応答しないWebページが再び応答するようになるときに発生します。
イベント: 'plugin-crashed'
戻り値:
event
Eventname
stringversion
string
プラグインプロセスがクラッシュしたときに発行されます。
イベント: 'destroyed'
webContents
が破棄されたときに発生します。
イベント: 'input-event'
戻り値:
event
EventinputEvent
InputEvent
入力イベントが WebContents へ送信されたときに発生します。 詳しくは InputEvent をご参照ください。
イベント: 'before-input-event'
戻り値:
event
Eventinput
Object - 入力プロパティ。type
string -keyUp
かkeyDown
。key
string - KeyboardEvent.key と等価です。code
string - KeyboardEvent.code と等価です。isAutoRepeat
boolean - KeyboardEvent.repeat と等価です。isComposing
boolean - KeyboardEvent.isComposing と等価です。shift
boolean - KeyboardEvent.shiftKey と同等。control
boolean - KeyboardEvent.controlKey と同等。alt
boolean - KeyboardEvent.altKey と等価です。meta
boolean - KeyboardEvent.metaKey と同等。location
number - KeyboardEvent.location と 同等。modifiers
string[] - 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によってフルスクリーン状態を抜けるときに発生します。