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

フォローする

attention_archive.png

概要

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

ShowModalDialog は JavaScript を用いた機能で、ポップアップの子画面が開いている間、
親画面を操作できない様に制御する特性があり、親子画面間のデータに一貫性をもたせたい場合などに使用されます。
仕様がブラウザ毎に異なっており、OperaやChromeにおいては動作さえしません。
(以前はInternet Explorer専用の機能だった時期もあります。)

BizRobo! でShowModalDialogを使用したWebシステムを操作するには、DAでの操作を検討してください。
もしくは、JavaScriptのコードを書き換える下記の方法がありますが、サポート対象外となります。

 

出力メッセージ

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

  Uncaught ReferenceError: showModalDialog is not defined

 

注意事項

JavaScriptコードの書き換えはサポート対象外です。お客様判断で対応をお願いします。

 

参考

【JacaScriptの書き換え方法】

① 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();

 

区分 確認Ver
仕様 10.2.0.2