wbf2モジュールを使えば、Browser Edge(Chromium)をベースとしたRenderingエンジン(WebView2)を扱うことができます。
wbf2モジュールにあるWebForm2クラスは、そのエンジンを使ってOgOからHTML表示と操作することができます。
旧wbfモジュールのWebFormクラスは、Browser InternetExplorerをベースとしたエンジンを使っているため、
表示が崩れたりJavaScriptがエラーになることが多々ありました。
しかし wbf2モジュールはBrowser Edge(Chromium)をベースとしたエンジン(WebView2)を使っているため、
WebForm2クラスではそのようなことがなく、しかもWebの最新の技術を将来に渡ってMicrosoft社がサポートしてくれます。
その理由で今後、wbf2モジュールを使うことを強くお勧めします。
HTMLで入力(WebForm2)
(このPDFにあるサンプルwebform2-sample.js, webform2-sample.html)
OgOとWebForm2の操作とそれぞれが持ってる関数の相関は次のようなイメージとなります。
ここではHTMLを表示するWindowを、クラス名と同じWebForm2と名付けてます。
今後、説明でWebForm2をクラス名とWindow名を同じに使うので読み分けてください。
WebForm2クラスは、wbf2モジュールから次のようにして引き出します。
let {WebForm2} = require('wbf2');以下に、簡単なサンプルを参考にしてwbf2モジュール(WebForm2クラス)の取り扱いを説明します。
//メッセージループのためのモジュール var axa = require('axa'); //WebForm2クラスをwbf2モジュールから取り出す var {WebForm2} = require('wbf2');
var wbf = new WebForm2("file:///"+__dirname + "\\test_web2.html");
wbf.wsize(600,800);
wbf.on("navigationCompleted", function(args) { //HTMLを読み込み完了後に起きるイベント //args={isSuccess, WebErrorStatus, NavigationId} //... } ); wbf.on("closing", function() { //WebForm2終了処理中に起きるイベント//WebForm2終了処理中に起きるイベント(WebForm2の閉じるボタンをクリックまたはwbf.close()が実行されたとき) axa.breakLoop(); //メッセージループを中止 } );
function calc_prime(max) {
let primes = [];
for (let n=2; n<=max; n++) {
let primed = true;
for (let k of primes) {
if (k*k>n) break;
if ((n%k)==0) {
primed = false;
break;
}
}
if (primed) {
primes.push(n);
}
}
return primes;
}
wbf.set_env((_s, ..._a)=>eval(_s));
wbf.show(); //表示処理でHTMLの読み込みが始まる。完了したら、"navigationCompleted"イベントが発生する
axa.msgLoop();
wbf.close();
<!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title>WebForm2テスト</title>
<script type="text/javascript">
<!--
function E(id) {return document.getElementById(id);}
function print(str) {
E("result").innerText = str;
}
function output(primes) {
let lines = "";
for (let i=0, N=primes.length; i<N; i++) {
lines += `${primes[i]}, `;
if ((i+1)%10==0) lines += "\n";
}
print(lines);
}
async function start_calc() {
let max = +E("max").value;
if (! Number.isInteger(max) || max<2) {
print("2以上の整数を入力してください");
return;
}
let primes = await ogo_call('calc_prime', max);
output(primes);
}
-->
</script>
</head>
<body> <pre> *** テストWebForm2 *** </pre> <p> 最大 <input type="text" id="max">までの素数<br> <br> <input type="button" id="start" value="スタート素数計算" onclick="start_calc();"> </p> 計算結果: <div id="result"></div> </p> </body> </html>
wbf2モジュールにあるクラスで、
Microsoft Edgeと同じエンジンWebView2コンポーネントを扱うクラスです。
使用前に次のスクリプトを実行してください。
let {WebForm2} = require('wbf2');
コンストラクタ | |
WebForm2 | HTMLを表示するWebForm2オブジェクトを作成 |
メンバ関数 | |
navigate | HTMLを表示 |
goBack | 前ページへ戻る |
canGoBack | 前ページへ戻れるかを判定 |
goForward | 次ページへ進む |
canGoForward | 次ページへ進めれるかを判定 |
close | WebForm2を閉じる |
isClosed | WebForm2が閉じられているかを判定 |
show | WebForm2を表示 |
hide | WebForm2を非表示 |
title | タイトルの取得/設定 |
wpos | WebForm2のWindow位置とサイズを取得/設定 |
wsize | WebForm2のWindowサイズを取得/設定 |
set_env | HTMLからOgOの関数(スクリプト)を実行するときの実行環境を設定 |
プロパティ | |
hwnd | WebForm2のbrowserWindowハンドル |
howner | WebForm2の親Windowハンドル |
イベント受信 | |
on, addEventListener | イベント受信関数の登録 |
off, removeEventListener | イベント受信関数の削除 |
close | WebForm2を閉じる |
messageReceiver | HTML側でogo_postMessage関数で送ったデータを受信する関数を登録 |
OgOからHTML内の関数,変数,DOMを扱う(非同期) | |
get, set | HTML内のJS変数・要素へのアクセス |
call | HTML内のJS関数呼び出し |
exec, eval | HTML内でOgOスクリプトを実行 |
postMessage | HTMLのJSへデータを送る |
get_value, set_value | HTML要素のvalue値 |
get_number, set_number | HTML要素のvalue数値 |
get_checked, set_checked | HTML要素のchecke属性値 |
get_radio, set_radio | HTML(radio)要素群からselect idの取得/設定 |
get_option, set_option | selectタグ要素内にあるoption要素の選択を取得/設定 |
get_attribute, set_attribute | HTML要素の属性値へのアクセス |
get_innerHTML, set_innerHTML | HTML要素内のHTMLの取得と設定 |
get_innerText, set_innerText | HTML要素内のTextの取得と設定 |
var {WebForm2} = require('wbf2'); var wbf = new WebForm2(url); //var wbf = new WebForm2();
wbf.wsize(wideth, height); /* 次のメソッド関数でshapeや実行環境、イベント登録などを行う。 wbf.title(...),wbf.wpos(...), wbf.hownerプロパティ wbf.set_env(...) wbf.on(...),wbf.off(...), wbf.messageReceiver(...) */
wbf.show(); //wbf.navigate(url)
//簡単に 実行環境を設定したい場合 oldenv = wbf.set_env( (_s,…_a)=>eval(_s) ); または //より管理しやすい実行環境を設定したい場合 oldenv = wbf.set_env( ()=>{ //HTMLからアクセス許可する変数、関数を記述 ・・・・・ return (_s,…_a)=>eval(_s); })());
WebForm2内HTMLのJavaScriptから、OgOにアクセスするための関数を以下に説明します。
すべて先頭に"ogo_"が付き、HTMLのJavaScript内から呼び出す関数です。
ogo_close | OgOとの接続を閉じ、WebForm2を終了。 |
ogo_get, ogo_set | OgO内JS変数へのアクセス |
close | WebForm2を閉じる |
ogo_exec, ogo_eval | OgO内のJS関数呼び出し |
ogo_postMessage | OgOのJSへデータを送る |
ogo_set_env | OgOからHTML内の関数あるいはスクリプトを実行するときのHTML実行環境を設定 |
ogo_messageReceiver | OgO側でwbf.postMessage関数で送られたデータを受信する関数を登録 |
oldenv = ogo_set_env( ()=>{
//OgOから HTMLにアクセス許可する変数、関数を記述
・・・・・
return (_s,…_a)=>eval(_s);
})());
WebFormクラスは、Windows Web Browser(IE, Edge)を使ってHTMLを表示するオブジェクトを扱います。
HTMLで入力(WebForm)
CommonDialogクラスは、Windows CommonDialogコントロールを扱うためのクラスです。
現時点では、ShowOpenとShowSave Dialog のみを提供しています。
このクラスを使う場合、最初に
var {CommonDialog} = require('commDlg');
コンストラクタ | |
CommonDialog | CommonDialogオブジェクト作成 |
プロパティ | |
DefaultExt | デフォルト拡張子 |
DialogTitle | ダイアログタイトル名 |
FileName | 初期ファイル名 |
Filter | ファイルフィルタ |
FilterIndex | フィルタインデックス |
Flags | フラッグ |
InitDir | 初期フォルダー |
MaxFileSize | ファイル名バッファーの最大サイズ |
ParentWnd | 親(オーナー)Windowハンドル |
メンバ関数 | |
ShowOpen | ファイル選択ダイアログを開く |
ShowSave | ファイル保存ダイアログを開く |
定数 | |
ShowOpen, ShowSaveで使う定数 |
cdlOFNReadOnly, OFN_READONLY cdlOFNOverwritePrompt, OFN_OVERWRITEPROMPT cdlOFNHideReadOnly, OFN_HIDEREADONLY cdlOFNNoChangeDir, OFN_NOCHANGEDIR cdlOFNHelpButton, OFN_SHOWHELP cdlOFNNoValidate, OFN_NOVALIDATE cdlOFNAllowMultiselect, OFN_ALLOWMULTISELECT cdlOFNExtensionDifferent, OFN_EXTENSIONDIFFERENT cdlOFNPathMustExist, OFN_PATHMUSTEXIST cdlOFNFileMustExist, OFN_FILEMUSTEXIST cdlOFNCreatePrompt, OFN_CREATEPROMPT cdlOFNShareAware, OFN_SHAREAWARE cdlOFNNoReadOnlyReturn, OFN_NOREADONLYRETURN cdlOFNNoLongNames, OFN_NOLONGNAMES cdlOFNNoDereferenceLinks, OFN_NODEREFERENCELINKS cdlOFNLongNames, OFN_LONGNAMES |
BrowserFolder | フォルダー選択ダイアログを開く |
var {CommonDialog} = require('commDlg'); var dlg = new CommonDialog(); dlg.DialogTitle = "ファイルを選択せよ"; //ダイアログタイトルを設定 dlg.InitDir = "d:\work"; //初期表示するディレクトリ dlg.Filter = "テキスト ファイル|*.txt|すべてのファイル|*.*"; // ファイル検索条件(フィルタ)を設定 var ans = dlg.ShowOpen(); if (ans) { print(ans); // 選択ファイルのフルパス名 } var {cdlOFNAllowMultiselect} = require('commDlg'); dlg.Flags = cdlOFNAllowMultiselect; ans = dlg.ShowOpen(); if (ans) { // 複数選択ファイルのフルパス名を表示 for (var i=0; i<ans.length; i++) { print( ans[i] ); } }
var {CommonDialog} = require('commDlg');
var dlg = new CommonDialog();
dlg.DialogTitle = "ファイル名を入力せよ"; //ダイアログタイトルを設定
dlg.DefaultExt = "txt"; //デフォルト拡張子
dlg.InitDir = "d:\\work"; //初期表示するディレクトリ
dlg.Filter = "テキスト ファイル|*.txt|すべてのファイル|*.*"; // ファイル検索条件(フィルタ)を設定
var ans = dlg.ShowSave();
if (ans) {
print(ans); // 入力ファイルのフルパス名
}
var {cdlOFNAllowMultiselect, cdlOFNFileMustExist} = require('commDlg');を実行してセットされます。
cdlOFNReadOnly, OFN_READONLY | ダイアログが開かれたときに、[読み取り専用ファイルとして開く] チェック ボックスが最初からオンになっているようにします。 |
cdlOFNOverwritePrompt, OFN_OVERWRITEPROMPT | ShowSave ダイアログで、選択されたファイルが既に存在している場合はメッセージを表示するようにします。 |
cdlOFNHideReadOnly, OFN_HIDEREADONLY | [読み取り専用] チェックボックスを非表示にします。 |
cdlOFNNoChangeDir, OFN_NOCHANGEDIR | ダイアログが開かれた時に、前回のディレクトリを設定します。 |
cdlOFNHelpButton, OFN_SHOWHELP | [ヘルプ] ボタンを表示します。 |
cdlOFNNoValidate, OFN_NOVALIDATE | 取得されたファイル名に無効な文字が含まれることを許可します。 |
cdlOFNAllowMultiselect, OFN_ALLOWMULTISELECT | 複数のファイルを選択できるようにします。 このフラグが設定された場合、ShowOpen,ShowSave関数は複数パス名の配列を返します。 |
cdlOFNPathMustExist, OFN_PATHMUSTEXIST | 有効なパス名しか入力できないようにします。 このフラグが設定され、無効なパスが入力された場合、警告が表示されます。 |
cdlOFNFileMustExist, OFN_FILEMUSTEXIST | FileName で設定したファイル名のみ入力出来るようにします。 このフラグが設定され、ユーザが無効なファイル名を入力した場合、警告が表示されます。 またこのフラグを設定すると自動的に cdlOFNPathMustExist フラグも設定されます。 |
cdlOFNCreatePrompt, OFN_CREATEPROMPT | 存在しないファイルを指定した場合、新規に作成するかどうかユーザーに問い合わせるように設定します。 このフラグが設定された場合、自動的にcdlOFNPathMustExist および cdlOFNFileMustExist フラグも設定されます。 |
cdlOFNShareAware, OFN_SHAREAWARE | 共有違反エラーは無視するようにします。 |
cdlOFNNoReadOnlyReturn, OFN_NOREADONLYRETURN | ShowSave ダイアログで、読み取り専用属性を持つファイル、または読み取り専用ディレクトリに存在するファイルを選択できないようにします。 このフラグが設定され、該当ファイルを選択した場合、警告が表示されます。 |
cdlOFNNoLongNames, OFN_NOLONGNAMES | 長いファイル名を使用しません。 |
cdlOFNNoDereferenceLinks, OFN_NODEREFERENCELINKS | ショートカットファイルの参照を禁止します。(ショートカットファイルを選択できるようにします) このフラグを設定しない場合、ショートカットファイルを指定すると、参照先のファイルが設定されます。 |
cdlOFNLongNames, OFN_LONGNAMES | 長いファイル名を使用します。 |
var {CommonDialog} = require('commDlg');
var dlg = new CommonDialog();
dlg.DialogTitle = "フォルダを選択してください";
dlg.InitDir = "d:\\work"; //初期選択フォルダー
var ans = dlg.BrowserFolder();
if (ans) {
print(ans); // 選択したフォルダーのフルパス名
}