WebBrowser リファレンス

Tablacus Explorer のメインウィンドウ、およびサブウィンドウ(オプション画面やダイアログ)に埋め込まれた Web ブラウザコントロール(CTRL_WB / CTRL_SW)のリファレンスです。

記法: P=プロパティ、M=メソッド。メンバー名の照合は大文字小文字を区別しません。

目次

  1. 概要
  2. 取得方法
  3. メソッド
  4. プロパティ
  5. イベント(OnClose)と閉じる処理
  6. メインウィンドウとサブウィンドウの違い
  7. 定数
  8. 使用例

1. 概要

WebBrowser オブジェクトは、HTML ページを表示するウィンドウを表します。内部では次のどちらかが使われます。

種類 説明
WebView2(Chromium ベース) 優先して使われる。TE が用意した WebView2 用のコンポーネントを読み込めたとき(内部の判定値 g_nBlink が 1)。スクリプトエンジンも Edge の Chakra が選ばれる
IE の WebBrowser コントロール(MSHTML) 上記が使えなかった場合の代替(g_nBlink が 2)

どちらの場合も、このオブジェクトの Document や Window を通して、表示中のページの DOM や window オブジェクトにアクセスできます。 読み込まれたページからは、external(= te オブジェクト)経由で TE の機能を呼び出せます。


2. 取得方法

方法 説明
te.Ctrl(CTRL_WB) 呼び出したスクリプトが動いているウィンドウの WebBrowser を返す。メインウィンドウのスクリプトからはメインの WebBrowser、サブウィンドウのページからはそのウィンドウの WebBrowser
te.Ctrls(CTRL_WB) 存在する WebBrowser すべて
te.CreateCtrl(CTRL_SW, url, arguments, parent, width, height [, x, y]) 新しいサブウィンドウを作って、その WebBrowser を返す(te リファレンス)
イベントの Ctrl 引数 OnBeforeNavigate などで、Ctrl.Type == CTRL_WB なら WebBrowser(アドレスバーなどにドロップしたときの判定に使われる)

非同期スクリプト(ui.js など WebView2 側)では await te.Ctrl(CTRL_WB) のように await が必要です。


3. メソッド

名前 戻り値 説明
Close() なし ウィンドウを閉じる。ウィンドウをすぐに透明にしてから WM_CLOSE を送る(OnClose は呼ばれない)
PreventClose() なし OnClose の中で呼ぶと閉じる操作を取り消す(5章)
Focus() なし フォーカスを移す。WebView2 では IOleInPlaceObject を再アクティブにし、IE 版では親ウィンドウを前面に出す
TranslateAccelerator(hwnd, msg, wParam, lParam) HRESULT キー入力などのウィンドウメッセージを、内部のブラウザコントロールのアクセラレータ処理に渡す。4個の引数が必要。引数が足りない場合は E_NOTIMPL を返す

4. プロパティ

名前 種別 説明
Type P(読み) メインウィンドウの WebBrowser なら CTRL_WB、サブウィンドウなら CTRL_SW
Data P スクリプトが自由に保持できる値
hwnd P(読み) ブラウザコントロールのウィンドウハンドル
Document P 表示中のページの document(IWebBrowser2.Document)。WebView2 のときは、値を代入すると内部の document プロパティを置き換える
Window P(読み) 表示中のページの window(HTML ウィンドウ)オブジェクト。取得できなければ空
Application P(読み) 内部の IWebBrowser2.Application
Visible P ブラウザコントロールの表示/非表示
DropMode P(書き) ブラウザコントロールへのファイルのドロップを受け付けるか(RegisterAsDropTarget)。WebView2 のときのみ有効で、IE 版では何も行わない。読み取りの値は返らない
OnClose P(書き) ウィンドウが閉じられるときに呼ばれる関数。引数は WebBrowser 自身(5章)

5. イベント(OnClose)と閉じる処理

WebBrowser.OnClose = function (WB) { ... } を設定すると、ユーザーがウィンドウの「閉じる」ボタン(×)などで閉じようとしたとき、すぐには閉じずに、この関数が呼ばれます。関数の中で次のどちらかを行います。

呼び出し 動作
WB.Close() 閉じる処理を続行する(ウィンドウは空白ページへ移動したあと破棄される)
WB.PreventClose() 閉じる操作を取り消す(ウィンドウは開いたまま)

6. メインウィンドウとサブウィンドウの違い

項目 メイン(CTRL_WB) サブウィンドウ(CTRL_SW)
取得 te.Ctrl(CTRL_WB)(メインのスクリプトから) te.CreateCtrl(CTRL_SW, …) / サブウィンドウ内の te.Ctrl(CTRL_WB)
OnClose 呼ばれない(閉じる処理は te.OnClose 側) 呼ばれる
ファイル/パスへのナビゲート URL がファイルシステムのパス、::{…} 形式、または file:// と data: 以外の / を含む URL の場合、ブラウザで開かずに TE のウィンドウ/タブで開く 同様の遷移キャンセルは行われない
新しいウィンドウ(window.open など) TE 側でのオープンに置き換えられる(ブラウザでは開かない) 同左
引数 — te.CreateCtrl(CTRL_SW, url, arguments, …) の arguments を、開かれたページが te.Arguments として一度だけ取得できる

7. 定数

定数 値 説明
CTRL_WB 0x20000 メインウィンドウの WebBrowser
CTRL_SW 0x20001 サブウィンドウの WebBrowser

8. 使用例

// 1. サブウィンドウを開く(オプション画面の例に近い形)
const WB = te.CreateCtrl(CTRL_SW, "file:///C:/path/page.html", { name: "value" }, te.hwnd, 600, 400);   // WebBrowser を返す
WB.OnClose = function (WB) {
    // 確認なしで閉じる
    WB.Close();
};

// 2. 閉じる前に確認して、取り消す
WB.OnClose = function (WB) {
    // IDNO = 7 (api.MessageBox の戻り値)
    if (api.MessageBox(te.hwnd, "閉じますか?", TITLE, MB_YESNO) == IDNO) {
        WB.PreventClose();   // 取り消し
        return;
    }
    WB.Close();
};

// 3. ページの DOM を読む
const doc = WB.Document;
const title = doc.title;
const win = WB.Window;
win.alert("hello");

// 4. 開かれたページ側(サブウィンドウ内)
//    te.Arguments はこの値を一度だけ受け取って、クリアする
const args = te.Arguments;
const WebBrowser = te.Ctrl(CTRL_WB);   // 自分自身の WebBrowser
WebBrowser.Close();                    // 自分を閉じる

// 5. メインの WebBrowser(ドロップ先の判定)
te.OnDrop = function (Ctrl, dataObj, pgrfKeyState, pt, pdwEffect) {
    if (Ctrl.Type == CTRL_WB) {
        // アドレスバーなどにドロップされた
    }
};

上の te.CreateCtrl(CTRL_SW, ...) の引数の指定方法は te リファレンス の CreateCtrl の項を参照してください。OnDrop の引数は、sync1.js の実装での並び(Ctrl, dataObj, pgrfKeyState, pt, pdwEffect)に合わせています。TITLE・MB_YESNO・IDNO は consts.js などで定義されているものを使う想定です(要確認)。

関連