ShowModalDialogの代替方法 – 子画面での設定情報が親画面に反映されない場合

フォローする

ShowModalDialogの機能は、BizRobo! では動作しません。

※Browser Tracer(ブラウザトレーサー)を使用すると、下記のようなメッセージが出力されます。

  Uncaught ReferenceError: showModalDialog is not defined

 ShowModalDialog は JavaScript を用いた機能で、ポップアップの子画面が開いている間、
親画面を操作できない様に制御する特性があり、親子画面間のデータに一貫性をもたせたい場合などに使用されます。

仕様がブラウザ毎に異なっており、OperaやChromeにおいては動作さえしません。
(以前はInternet Explorer専用の機能だった時期もあります。)

BizRobo! でShowModalDialogを使用したWebシステムを操作するには、
DAでの操作を検討してください。

DAが使用できない場合は、JavaScriptのコードを書き換える下記の方法があります。
※JavaScriptコードの書き換えはサポート対象外です。お客様責任で対応してください。

 

① ShowModalDialog命令の一括書き換え(HTMLファイル内)

  1. HTMLコード中の全ShowModalDialog命令を一括変換

  2. 「ロボットの設定(Configure Robot)」ダイアログで「基本(Basic)」タブを開く。

  3. 「デフォルトオプション()」項目の「設定(Configure)」ボタンをクリックする。

  4. 「ページロード中(Page Loading)」タブ内の「ページの変更(Change Pages)」項目 に
   下記設定例を追加する。

<設定例>

・Replace Pattern: (showModalDialog)(.*?,)(.*?)(,)
・Replace Express: “window.open”+$2+”‘CustomWindow'”+$4

 

② ShowModalDialog命令の一括書き換え
 (外部読み込みJavaScriptファイル内)

  1. 外部JavaScriptコード中の全ShowModalDialog命令を一括変換

  2. 「ロボットの設定(Configure Robot)」ダイアログで「基本(Basic)」タブを開く。

  3. 「デフォルトオプション(Default Options)」項目の「設定(Configure)」ボタンをクリックする。

  4. 「JavaScript実行(JavaScript Execution)」タブ内の「JavaScript変更(JavaScript Changes)」項目 に
   下記設定例を追加する。

 <設定例>

・Replace Pattern: (showModalDialog)(.*?,)(.*?)(,)
・Replace Express: “window.open”+$2+”‘CustomWindow'”+$4

 

 ③ ShowModalDialog命令で呼び出されたウィンドウ
   (HTML等のファイル)の
window.close実施関数を個別に書き換え

  1. 既存命令コードの解析

  2. var f = window.opener.document.form_car; などの親画面のドキュメントオブジェクトを
   直接指定するマスク変数などを定義し、処理の再定義を行う。(コーディング)

下記は参考として、③の個別書き換えの例です。

 

■書き換え前

/*
オリジナルコード(子画面側)
*/
function quit(f){
    var ret=new Array();
    var i=f.cartype_cd.selectedIndex
    if (i>=0){
        var cartype_cd=f.cartype_cd.options[i].value
        ret[ret.length]=cartype_cd; // 0:車種コード
        ret[ret.length]=gradename[cartype_cd];  // 1:グレード
        ret[ret.length]=capacity[cartype_cd];  // 2:定員
        ret[ret.length]=drive_cd[cartype_cd];  // 3:駆動
        ret[ret.length]=carry[cartype_cd];  // 4:積載
        ret[ret.length]=grade_cd[cartype_cd];  // 5:グレードCD
    } else {
        ret=undefined;
    }
    window.returnValue=ret;
    window.close();
    return false;
}

■書き換え後

/*
修正後コード(子画面処理も親画面処理も両方子画面に記述)
*/
// 子画面処理
var ret=new Array();
var f = document.forms[0];
var i=f.cartype_cd.selectedIndex
if (i>=0){
var cartype_cd=f.cartype_cd.options[i].value
ret[ret.length]=cartype_cd; // 0:車種コード
ret[ret.length]=gradename[cartype_cd]; // 1:グレード
ret[ret.length]=capacity[cartype_cd]; // 2:定員
ret[ret.length]=drive_cd[cartype_cd]; // 3:駆動
ret[ret.length]=carry[cartype_cd]; // 4:積載
ret[ret.length]=grade_cd[cartype_cd]; // 5:グレードCD
} else {
ret=undefined;
}

// 親画面処理
var f = window.opener.document.form_car;
if (ret.length==6){
if (ret[0]!=undefined) f.cartype_cd.value=ret[0];
if (ret[1]!=undefined) f.grade_name_full.value=ret[1];
if (ret[2]!=undefined) f.capacity.value=ret[2];
for (var i=0; i<f.drive_cd.options.length; i++){
if (f.drive_cd.options[i].value==ret[3]){
f.drive_cd.selectedIndex=i;
break;
}
}
if (ret[4]!=undefined) f.max_loading.value=ret[4];
if (ret[5]!=undefined) f.grade_cd.value=ret[5];
}
f.grade_name_full.select();

window.close();
0人中0人がこの記事が役に立ったと言っています

コメント

0件のコメント

記事コメントは受け付けていません。