1

XULアプリケーションで、次のコードでダイアログウィンドウを開きます。

var win = myWindow.openDialog("chrome://mywindow/content/mydialog.xul",
                  "Dialog creation",
                  "chrome, dialog, modal, resizable=yes",
                           params).focus();

そして、私はこのコードによって、ユーザーから渡された情報にアクセスします。

if (params.out){     
    dialogVariablesValues = params.out['inputValues'];
    sameDialog = params.out['sameDialog'];  
    (...)
}

ダイアログウィンドウの[OK]ボタンをクリックすると、ウィンドウが閉じ、if(params.out)がtrueになり、値を取得できます。このアプローチには問題はありません。問題は、依存するようにダイアログウィンドウを変更する必要があることです。だから私はコードを次のように変更しました:

var win = myWindow.openDialog("chrome://mywindow/content/mydialog.xul",
                  "Dialog creation",
                  "chrome, dialog, dependent, resizable=yes",
                           params).focus();

しかし、params.outは常にnullです...

依存ダイアログを閉じたときに値を取得する方法を知っている人はいますか?

4

1 に答える 1

0

依存ダイアログではopenDialog()、ダイアログがまだ開いている場合でも、呼び出し後に実行が続行されます。そのため、そのダイアログが閉じられたときにコードに「通知」する必要があります。最も簡単な解決策は、params でコールバックを渡し、ダイアログが閉じられたときにコールバックを呼び出すように変更することです。したがって、ダイアログを開くコードは次のようになります。

params.callback = function(inputValues, sameDialog)
{
  // Do something with the dialog result here
};
myWindow.openDialog(..., params).focus();

ダイアログには次のようなコードがあります。

var inputValues = ...;
var sameDialog = ...;
window.addEventListener("unload", function()
{
  // Dialog is being closed, call the callback
  window.arguments.callback(inputValues, sameDialog);
}, false)
于 2012-04-23T07:58:53.320 に答える