Skip to main content

Module window_api

Module window_api 

Source

Functions§

abort_controller_abort 🔒
controller.abort(reason?)。以前は signal.aborted を立てるだけで、(1) 既に中断済み の場合の二重発火防止、(2) 仕様どおりの signal.reason、(3) signal.addEventListener ('abort', fn)/signal.onabort によるコールバック通知、のいずれも欠けていた (addEventListener 自体が単なる no-op だったため、abort() を呼んでも登録した リスナが一切発火しないサイレントなバグ)。
abort_controller_ctor 🔒
abort_signal_abort_static 🔒
AbortSignal.abort(reason?)(ES2022)。既に中断済みの状態で signal を返す 静的ファクトリ。AbortController を経由せず即座に中断済み signal が欲しい 場合(引数バリデーション失敗時の早期中断等)に使われる。
abort_signal_add_event_listener 🔒
signal.addEventListener('abort', fn)。以前は無条件 no-op で、リスナが一切 保持/発火されなかった。他の EventTarget 風オブジェクト(XHR 等)と同じ 「on<type> プロパティへ格納する単一リスナ」簡略方式で対応する。
abort_signal_any 🔒
AbortSignal.any(iterable)(ES2024)。渡した signal 群のいずれかが中断された 時点で中断される合成 signal を返す(複数の中断条件を1つの signal にまとめる 定番パターン)。既存の addEventListener('abort', fn) は「on<type> に単一 リスナを格納する」簡略実装のため、入力 signal 側に別のリスナが既に登録済みだと 上書きしてしまう制約がある(この処理系の EventTarget 系オブジェクト全般に 共通の既知の簡略化)。abort_signal_timeout と同じ理由(ネイティブ関数は クロージャで値を束縛できない)で、入力配列をグローバルの一時変数経由で 渡した上で eval_source に組み立てた JS を実行する。
abort_signal_remove_event_listener 🔒
signal.removeEventListener('abort', fn)addEventListener は実装済みなのに 対をなす削除側が無条件 no-op のままだったバグ(登録したリスナを外すつもりが 何も起きず、後から abort() すると外したはずのリスナがまだ発火する)。 「on<type> に単一リスナを格納する」既存の簡略方式に合わせ、渡された関数が 現在登録済みのものと同一参照の場合のみ消す(別の関数参照を渡した場合は 仕様どおり no-op のまま)。
abort_signal_throw_if_aborted 🔒
signal.throwIfAborted()(ES2022/DOM。既に中断済みなら reason を投げ、 そうでなければ何もしない、fetch 等のループ内チェックで頻出のイディオム)が 丸ごと未対応だった。AbortSignal.timeout()/.any() は内部で new AbortController() を経由するため、abort_controller_ctor/ abort_signal_abort_static の2箇所にさえ追加すれば全生成経路をカバーする。
abort_signal_timeout 🔒
AbortSignal.timeout(ms)(ES2022)。指定ミリ秒後に自動的に abort する AbortSignal を返す、fetch のタイムアウト実装で最頻出のイディオム。この エンジンの setTimeout は実時間を計測せずマクロタスクキューに積むだけの 簡略実装のため、正確な実時間待機ではなくキュー順序に従った近似になる (既存の setTimeout 全体の簡略化と同じ水準)。ネイティブ関数はクロージャで ms を束縛できないため、AbortController/setTimeout を組み合わせる JS ソースを組み立てて eval_source で実行する。 AbortSignal.timeout(ms)。以前は c.abort() を引数無しで呼んでおり、 signal.reason が仕様どおりの TimeoutError(DOM Level 4 legacy code 23)ではなく既定の AbortError(code 20)になっていたバグ。 abort_signal_any と同じ「グローバル一時変数経由で Rust 側の値を JS へ 渡す」パターンで、事前に構築した TimeoutErrorDOMException を 束縛してから c.abort(reason) を呼ぶ。
deepest_last_descendant 🔒
部分木内で最も深い「最後の子孫」(previousNode の下降先探索用)。
document_add_event_listener 🔒
document.addEventListener(type, fn, options)window 固有の固定 イベント種別(scroll/hashchange/error等)は従来どおり windowと 共有する隠し配列へ登録するが、それ以外の汎用種別(click/keydown等)は document自身が持つEventTarget風の_listenersevent_target_add_ event_listenerと同じ格納形式)へ登録する。実クリック等の実DOMイベント バブリングの最終到達点としてdispatch_event_in_interpinterp/calls.rs)がこちらを読み出す(丸ごと未対応だった。以前は 固定種別以外をwindow_add_event_listener_ => {}アームで黙って 破棄しており、document.addEventListener('click', fn)という定番の イベント委譲パターンが登録すら行われず一切機能しなかった。2026-07-16 発見・実装)。
document_create_node_iterator 🔒
document.createNodeIterator(root, whatToShow?, filter?)
document_create_tree_walker 🔒
document.createTreeWalker(root, whatToShow?, filter?)(DOM 標準。 丸ごと未対応だった。DOM 部分木を走査する定番パターン)。whatToShow/ filter は保持のみで実際の絞り込みは行わない簡略実装(:where():is() と同一視するのと同じ「フィルタは常に通過」方針)。
document_dispatch_event 🔒
document.dispatchEvent(event)。JS側から直接document.dispatchEvent(new Event('click'))のように合成発火する経路(実クリックのDOMバブリング経由の 到達はdispatch_event_in_interp側の別経路)。固定種別以外はdocument 自身をターゲットとしてevent_target_dispatch_eventと同じロジックで 発火する(丸ごと未対応だった。2026-07-16 発見・実装)。
document_exit_fullscreen 🔒
document.exitFullscreen()(対をなす解除メソッド。丸ごと未対応だった)。
document_exit_picture_in_picture 🔒
document.exitPictureInPicture()(対をなす解除メソッド。丸ごと未対応 だった)。
document_exit_pointer_lock 🔒
document.exitPointerLock()(対をなす解除メソッド。丸ごと未対応だった)。
document_has_storage_access 🔒
document.hasStorageAccess()(Storage Access API。丸ごと未対応 だった)。この処理系にはサードパーティ Cookie 分離/ブロック機構自体が 無くストレージは常にアクセス可能なため、常に true を返す簡略実装。
document_remove_event_listener 🔒
document.removeEventListenerdocument_add_event_listenerと対になる 振り分け(丸ごと未対応だった。2026-07-16 発見・実装)。
document_request_storage_access 🔒
document.requestStorageAccess()(対をなす要求メソッド。丸ごと未対応 だった)。理由は hasStorageAccess と同じで、常に成功を返す。
dom_exception_ctor 🔒
new DOMException(message?, name?)。仕様どおり既定値は message=""/ name="Error"
dom_exception_legacy_code 🔒
name から DOM Level 4 のレガシー数値定数(err.code)を引く。未知の 名前は仕様どおり 0
dom_exception_to_string 🔒
dom_request_fullscreen
element.requestFullscreen()(Fullscreen API。丸ごと未対応だった)。 実際の画面占有切り替えは行わず、document.fullscreenElement を更新する だけの簡略実装(fullscreenchange イベントは対象外)。CSS :fullscreen 疑似クラス(丸ごと未対応だった。2026-07-18 発見・実装)が対象要素を 判定できるよう、:indeterminate_indeterminateと同じ内部専用属性 _fullscreenもあわせて書き込む。
dom_request_picture_in_picture
<video>.requestPictureInPicture()(Picture-in-Picture API。丸ごと 未対応だった)。requestFullscreen/requestPointerLock と全く同じ 「状態のみ追跡する」簡略方針。仕様どおり解決済み Promise( PictureInPictureWindow 相当のダミーオブジェクトで解決)を返す。
dom_request_pointer_lock
element.requestPointerLock()(Pointer Lock API。丸ごと未対応だった)。 requestFullscreen/fullscreenElement と全く同じ「実際のロック/画面占有 までは行わず状態のみ追跡する」簡略方針(pointerlockchange イベントは 対象外)。
element_scroll_into_view 🔒
is_window_shared_event_type 🔒
document.addEventListener/removeEventListener/dispatchEventwindow と共有する固定イベント種別の集合(window_add_event_listenerの match armと同じ)。
make_abort_error 🔒
AbortSignal 用の既定の中断理由(DOMException("AbortError") の簡易近似)。
make_dom_exception 🔒
DOMException インスタンスを構築する共通ヘルパー。AbortController. abort() 等、エンジン内部で例外を作る箇所からも再利用する(詳細は dom_exception_ctor 参照)。
ni_pointer_before 🔒
ni_ref_idx 🔒
ni_root_idx 🔒
ni_set_state 🔒
node_iterator_next_node 🔒
NodeIterator.prototype.nextNode()
node_iterator_previous_node 🔒
NodeIterator.prototype.previousNode()
node_iterator_step_next 🔒
pre-order で idx の次のノード(root 部分木の範囲内)。
push_window_listener 🔒
window の隠し props 配列(ObjKind::Array)へリスナを追記する。 scroll/popstate など、eval をまたいで永続させたいリスナの保存に使う (Interp ローカルだと eval 毎に破棄されるため window オブジェクトに退避)。 エントリは addEventListener{signal} 対応(2026-07-14 発見・実装) のため [cb, signal] 形式で格納する(event_target_* 系の [cb, once, signal] と同系統。window 系イベントには once 概念が無いためこちら は2要素)。window_listeners(interp.rs)/_message_listeners/ _error_listeners の発火経路側で event_target_listener_cb/ window_listener_aborted を使って読み解く。
report_error 🔒
reportError(error)(丸ごと未対応だった。未捕捉例外と同じ経路で window.onerror(レガシー5引数シグネチャ)/ window.addEventListener('error', fn)(ErrorEvent 風オブジェクト)へ 同期的に通知する。仕様上のイベントループ経由の非同期報告・ event.preventDefault() によるコンソール抑制は簡略化し、常に console.error へも出力する)。
screen_orientation_lock 🔒
screen.orientation.lock(orientation)(Screen Orientation API。丸ごと 未対応だった)。実際にディスプレイの向きを固定する機構は無いため、 fullscreenElement 等と同じ「要求された値へ type を書き換えるだけ」の 簡略実装。
screen_orientation_unlock 🔒
screen.orientation.unlock()(対をなす解除メソッド。丸ごと未対応 だった)。現在のビューポート寸法から求めた自然な向きへ type を戻す (window.screen 初期化時の判定ロジックと同じ)。
tree_walker_first_child 🔒
TreeWalker.prototype.firstChild()
tree_walker_last_child 🔒
TreeWalker.prototype.lastChild()
tree_walker_next_node 🔒
TreeWalker.prototype.nextNode()。文書順で次のノードへ移動する(root を越えない)。
tree_walker_next_sibling 🔒
TreeWalker.prototype.nextSibling()
tree_walker_parent_node 🔒
TreeWalker.prototype.parentNode()
tree_walker_previous_node 🔒
TreeWalker.prototype.previousNode()
tree_walker_previous_sibling 🔒
TreeWalker.prototype.previousSibling()
tw_current_idx 🔒
tw_root_idx 🔒
tw_set_current 🔒
window_add_event_listener 🔒
window.addEventListener(‘load’|‘DOMContentLoaded’, cb) → load は即時発火。 ‘scroll’ は window の隠し props _scroll_listeners、‘popstate’ は _popstate_listeners、 ‘hashchange’ は _hashchange_listeners、‘resize’ は _resize_listeners 配列へ永続記録(該当イベント発生時にホストが発火)。
window_close 🔒
window.close()(丸ごと未対応だった。理由はwindow_openと同じ)。 この処理系にはウィンドウを閉じる操作自体が無いため無害な no-op (window.print()と同方針)。
window_confirm 🔒
window.confirm(message)(丸ごと未対応だった。window.alertconsole_ logで無害に代替されていたが、対になるconfirm/prompt自体がグローバル にもwindowにも一切登録されておらず、呼び出すとReferenceError/ TypeErrorになっていた。2026-07-16 発見・実装)。この処理系にはブロッキング モーダルダイアログ機構が無いため、メッセージをconsole_logと同じ経路へ 出力したうえで、常に「OK」を選択したものとしてtrueを返す(alertと 同じ「実際のUIは出さないが呼び出し自体は安全に完了させる」簡略方針)。
window_dispatch_event 🔒
window.dispatchEvent(event)(丸ごと未対応だった。window オブジェクトに addEventListener/removeEventListener はあったが dispatchEvent 自体が 存在せず、window.dispatchEvent(new HashChangeEvent(...)) のような JS 側 からのイベントシミュレーションが一切できなかった。window_add_event_ listener が対応する6種の固定イベント種別(scroll/popstate/ hashchange/resize/message/error)に限り、対応する隠し配列 (push_window_listenerが書き込む先)からリスナを読み出し、渡された event オブジェクトをそのまま転送して呼び出す(fire_window_listeners のような独自 Event 再構築は行わず、JS 側が構築した実際のオブジェクトを そのまま渡す)。対応外の種別は無害に無視する(addEventListener側の 未対応種別の扱いと同じ)。window.onerrorreport_error側で既に 対応済み)と同様に、window.on<type>window.onhashchange = fn等の IDL属性スタイルのハンドラ)が設定されていればそれも合わせて呼び出す。
window_focus 🔒
window.focus()/.blur()(丸ごと未対応だった。理由はwindow_openと 同じ)。この処理系にはウィンドウ/タブという概念自体が無く( document.hasFocus()が常にtrue固定なのと同じ理由)、フォーカス要求 先も存在しないため無害な no-op。
window_listener_aborted 🔒
push_window_listener の格納エントリ [cb, signal]signal が abort 済みかどうか。
window_match_media 🔒
window_open 🔒
window.open(url, target, features)(丸ごと未対応だった。confirm/ promptと同じ監査で発見。typeof window.open === 'function'という 定番のフィーチャー検出ガードや、ポップアップを試みるコードが TypeErrorで丸ごと落ちる状態だった。2026-07-16 発見・実装)。この処理系 には複数ウィンドウ/ポップアップを新規に開く仕組みが無いため、実際には 何も開かず、仕様上「開けなかった(ポップアップブロック等)」場合と 同じnullを返す誠実な簡略実装(ブラウザのポップアップブロッカーが window.open()を拒否した場合の正規の戻り値と同じ形)。
window_post_message 🔒
window.postMessage(data, targetOrigin)(丸ごと未対応だった)。詳細は window.props.insert("postMessage", ...) 箇所のコメント参照。
window_prompt 🔒
window.prompt(message, default)(丸ごと未対応だった。理由はwindow_ confirmと同じ)。default引数があればそれをそのまま返す(ユーザーが 何も変更せず「OK」を押した相当)。無指定時は仕様どおりnull
window_remove_event_listener 🔒
window.removeEventListener(type, cb)(丸ごと未対応だった。以前は 無害な domNoop のままで、window.addEventListener で登録した リスナが AbortSignal 経由以外では二度と解除できないバグだった)。 window_add_event_listener と同じ6種の固定イベント種別に限り対応する 隠し配列から、参照が一致するエントリを取り除く(event_target_remove_ event_listener と同じ Rc::ptr_eq 比較パターン)。
window_scroll_by 🔒
window.scrollBy(x, y)(丸ごと未対応だった。dom_noopのまま何もせず、 相対スクロールが一切機能しなかった。2026-07-16 発見・実装)。複数回 呼ばれた場合は次の描画までの分を加算する。
window_scroll_to 🔒
window.scrollTo(x, y)/window.scroll(x, y)(丸ごと未対応だった。以前は SCROLL_Y という孤立した static へ書き込むだけの実装で、window. scrollYfire_scroll経由でレンダラが更新する別経路)にも実際の描画位置 にも一切反映されない死んだ経路だった。2026-07-16 発見・修正)。 DomBridge::pending_scroll_abs_yへ保留し、render.rsdraw()冒頭で 消費・WebEngine::scroll_yへ適用・fire_scroll()呼び出しまで行う。
window_stop 🔒
window.stop()(丸ごと未対応だった。ブラウザの「読み込み中止」ボタン に相当する定番API。2026-07-17 発見)。この処理系はページ全体を同期的に パースしてから<script>を実行するため、途中で中断できる非同期の 読み込み処理自体が無く、window.close/.printと同じ無害なno-op。