0

アドオンにダイアログがあり、削除プロセスが完了すると開きます。私はこのようなすべてのメッセージに次のようなXULダイアログを使用します。

<?xml version="1.0"?>
<?xml-stylesheet href="chrome://myaddon/skin/Style.css" type="text/css"?>
<!DOCTYPE overlay SYSTEM "chrome://myaddon/locale/mydtd.dtd">

<dialog xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
        class="dialog" ondialogcancel="return true;">
    <dialogheader id="dlgHdr"/>
    <vbox flex="1" id="content" pack="center">
    </vbox>
    <script
        type="application/x-javascript"
        src="chrome://myaddon/content/mainScript.js"
    />
    <script
        type="application/x-javascript"
        src="chrome://myaddon/content/dialogInit.js"
    />
    <tfs_string id="new-profile-success" value="&newProfileSuccess.Text;"
                style="overflow: hidden" />
    <tfs_string id="delete-profile-success" value="&deleteProfileSuccess.Text;"
                style="overflow: hidden" />
</dialog>

キャンセルボタンがあり、ondialogcancelハンドラーはtrueを返します。ただし、ボタンを押してもすぐには閉じません。このダイアログを少しドラッグして非表示にする必要があります。さらに、この問題は、アドオンを再インストールした後にブラウザを再起動した場合にのみ発生します。キャンセルを押した直後にもう一度再起動ダイアログが閉じた後。このダイアログを他のいくつかのメッセージに使用しますが、そのような問題はありません。

ポップアップを使用して再起動する代わりに、ウィンドウを閉じてChromebugデバッガーで再度開くと、このバグを再現できません。しかし、別のFFバージョンを起動してから、(デバッガーを使用して)最初のバージョンを再度起動すると、なんとかそれを再現できます。しかし、dialogcancelハンドラーで段階的な実行を使用すると、Chromebugのインターフェイスが応答しなくなり(スクリプトコンテンツ領域を除く)、デバッガーでwindow.close()が実行されていることを確認した後、ダイアログが閉じないため、ダイアログをドラッグする必要がありますそれが消えるようにもう一度少し周りのウィンドウ。私は何をすべきか?

4

1 に答える 1

1

私はついにその理由を見つけました。問題は確かにdialogInit.jsスクリプトによって引き起こされました。

window.addEventListener('load', function () { myext.simpleDialogInitialize(); }, false);
window.addEventListener("MozAfterPaint", function () { window.sizeToContent(); }, false);
window.addEventListener('unload', function () { myext.simpleDialogFinalize(); }, false);

'load'および'unload'イベントのハンドラーも含まれています。最初に、このウィンドウを開くメソッドで指定された初期化子を呼び出します。しかし、window.sizeToContentを呼び出す'MozAfterPaint'イベントのハンドラーがもう1つあったため、無限ループがトリガーされたと思います。拡張機能は最初から作成されたものではないので、しばらくの間この間違いに気づきませんでした。そのイニシャライザーを呼び出した後、サイズ変更を「load」イベントハンドラーに移動しました。正常に動作します。

于 2012-07-04T10:39:33.027 に答える