webFrameMain
Webページとiframeを制御します。
プロセス: メイン
webFrameMain
モジュールを使用すると、既存のWebContents
インスタンス間でフレームを検索できます。ナビゲーションイベントが一般的なユースケースです。
const { BrowserWindow, webFrameMain } = require('electron')
const win = new BrowserWindow({ width: 800, height: 1500 })
win.loadURL('https://twitter.com')
win.webContents.on(
'did-frame-navigate',
(event, url, httpResponseCode, httpStatusText, isMainFrame, frameProcessId, frameRoutingId) => {
const frame = webFrameMain.fromId(frameProcessId, frameRoutingId)
if (frame) {
const code = 'document.body.innerHTML = document.body.innerHTML.replaceAll("heck", "h*ck")'
frame.executeJavaScript(code)
}
}
)
既存のページのフレームには、WebContents
のmainFrame
プロパティを使用してアクセスすることもできます。
const { BrowserWindow } = require('electron')
async function main () {
const win = new BrowserWindow({ width: 800, height: 600 })
await win.loadURL('https://reddit.com')
const youtubeEmbeds = win.webContents.mainFrame.frames.filter((frame) => {
try {
const url = new URL(frame.url)
return url.host === 'www.youtube.com'
} catch {
return false
}
})
console.log(youtubeEmbeds)
}
main()
メソッド
これらのメソッドは、webFrameMain
モジュールからアクセスできます
webFrameMain.fromId(processId, routingId)
processId
Integer - フレームを所有するプロセスの内部IDを表すInteger
。routingId
Integer - 現在のレンダラープロセス内の一意のフレームIDを表すInteger
。ルーティングIDは、WebFrameMain
インスタンス(frame.routingId
)から取得でき、フレーム固有のWebContents
ナビゲーションイベント(例:did-frame-navigate
)でも渡されます。
戻り値 WebFrameMain | undefined
- 指定されたプロセスとルーティングIDを持つフレーム。または、指定されたIDに関連付けられたWebFrameMainがない場合はundefined
。
クラス: WebFrameMain
プロセス: メイン
このクラスは、'electron'
モジュールからエクスポートされません。Electron APIの他のメソッドの戻り値としてのみ利用可能です。
インスタンスイベント
イベント: 'dom-ready'
ドキュメントが読み込まれたときに発生します。
インスタンスメソッド
frame.executeJavaScript(code[, userGesture])
code
stringuserGesture
boolean (オプション) - デフォルトはfalse
です。
戻り値 Promise<unknown>
- 実行されたコードの結果で解決されるプロミス。または、実行がスローされるか、拒否されたプロミスになる場合は拒否されます。
ページ内でcode
を評価します。
ブラウザウィンドウでは、requestFullScreen
のような一部のHTML APIは、ユーザーからのジェスチャによってのみ呼び出すことができます。userGesture
をtrue
に設定すると、この制限が解除されます。
frame.reload()
戻り値 boolean
- リロードが正常に開始されたかどうか。フレームに履歴がない場合のみfalse
になります。
frame.send(channel, ...args)
channel
string...args
any[]
引数とともに、channel
を介して非同期メッセージをレンダラープロセスに送信します。引数は、構造化クローンアルゴリズムでシリアライズされます。postMessage
と同じように、プロトタイプチェーンは含まれません。関数、プロミス、シンボル、WeakMap、またはWeakSetを送信すると例外がスローされます。
レンダラープロセスは、ipcRenderer
モジュールでchannel
をリッスンすることにより、メッセージを処理できます。
frame.postMessage(channel, message, [transfer])
channel
stringmessage
anytransfer
MessagePortMain[] (オプション)
0個以上のMessagePortMain
オブジェクトの所有権をオプションで譲渡して、メッセージをレンダラープロセスに送信します。
譲渡されたMessagePortMain
オブジェクトは、発行されたイベントのports
プロパティにアクセスすることにより、レンダラープロセスで利用可能になります。レンダラーに到着すると、それらはネイティブDOM MessagePort
オブジェクトになります。
例:
// Main process
const win = new BrowserWindow()
const { port1, port2 } = new MessageChannelMain()
win.webContents.mainFrame.postMessage('port', { message: 'hello' }, [port1])
// Renderer process
ipcRenderer.on('port', (e, msg) => {
const [port] = e.ports
// ...
})
インスタンスプロパティ
frame.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メッセージを送受信できます。ただし、nodeIntegrationInSubFrames
オプションが有効になっている場合、子フレームもIPCメッセージを送受信できます。WebContents.ipc
インターフェイスは、nodeIntegrationInSubFrames
が有効になっていない場合に便利です。
frame.url
読み取り専用
フレームの現在のURLを表すstring
。
frame.origin
読み取り専用
RFC 6454に従ってシリアル化された、フレームの現在のオリジンを表すstring
。これはURLとは異なる場合があります。たとえば、フレームがabout:blank
で開かれた子ウィンドウである場合、frame.origin
は親フレームのオリジンを返し、frame.url
は空の文字列を返します。スキーム/ホスト/ポートのトリプルオリジンを持たないページでは、シリアル化されたオリジンが"null"
になります(つまり、文字n、u、l、lを含む文字列)。
frame.top
読み取り専用
frame
が属するフレーム階層の最上位フレームを表すWebFrameMain | null
。
frame.parent
読み取り専用
frame
の親フレームを表すWebFrameMain | null
。frame
がフレーム階層の最上位フレームである場合は、プロパティはnull
になります。
frame.frames
読み取り専用
frame
の直接の子孫を含むWebFrameMain[]
コレクション。
frame.framesInSubtree
読み取り専用
frame
のサブツリー内のすべてのフレーム(それ自身を含む)を含むWebFrameMain[]
コレクション。これは、すべてのフレームを走査するときに役立ちます。
frame.frameTreeNodeId
読み取り専用
フレームの内部FrameTreeNodeインスタンスのIDを表すInteger
。このIDはブラウザ全体でグローバルであり、コンテンツをホストするフレームを一意に識別します。識別子はフレームの作成時に固定され、フレームの存続期間中は一定です。フレームが削除されると、IDは二度と使用されません。
frame.name
読み取り専用
フレーム名を表すstring
。
frame.osProcessId
読み取り専用
このフレームを所有するプロセスのオペレーティングシステムの pid
を表す Integer
です。
frame.processId
読み取り専用
このフレームを所有するプロセスの Chromium 内部の pid
を表す Integer
です。これは OS のプロセス ID とは異なります。OS のプロセス ID を読み取るには、frame.osProcessId
を使用してください。
frame.routingId
読み取り専用
現在のレンダラープロセスにおける一意のフレーム ID を表す Integer
です。同じ基盤となるフレームを参照する異なる WebFrameMain
インスタンスは、同じ routingId
を持ちます。
frame.visibilityState
読み取り専用
フレームの可視性状態を表す文字列
です。
ページ可視性 APIが他の Electron API にどのように影響されるかについても参照してください。