MozillaZine.jp フォーラム
https://forums.mozillazine.jp/

dropハンドラ内でダイアログ・ボックスを使いたい
https://forums.mozillazine.jp/viewtopic.php?f=26&t=9120
ページ 11

作成者:  mitsugu [ 2009年9月14日(月) 11:59 ]
記事の件名:  dropハンドラ内でダイアログ・ボックスを使いたい

 先人の智慧を拝借致したくお願い申し上げます。

 旧XULチュートリアルを参考に、ドラッグ・アンド・ドロップに対応した拡張を作ろうとしています。
 Drop イベントハンドラ内で openDialog() により、ダイアログ・ボックスを開く仕様にしているのですが、開いたダイアログ・ボックス内の memuitem 要素がマウスで操作できません。
 これはそのような使い方が想定されていないのか、あるいはなんらかのバグなのか、使い方が間違っているのかご教示願えないでしょうか。

 テスト用に拡張を作成してダイアログを開くところの JavaScript コードは以下のようになっています。
コード:
var   pdata={
   setAttribute: function()
   {
      window.openDialog("chrome://test/content/attribute.xul","","chrome,dialog,modal");
   }
};
var   puploader = {
   getSupportedFlavours : function ()
   {
      var flavours = new FlavourSet();
      flavours.appendFlavour("text/unicode");
      return flavours;
   },
   onDragEnter: function (evt,flavour,session){
   },
   onDragOver: function (evt,flavour,session){
   },
   onDrop:function(evt,dropdata,session)
   {
      pdata.setAttribute();
   },
   init: function()
   {
   }
};
window.addEventListener('load',puploader.init,false);

 attribute.xul は以下の通りです。
コード:
<?xml version="1.0" encoding="UTF-8"?>

<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>

<!DOCTYPE dialog SYSTEM "chrome://test/locale/attribute.dtd">
<dialog id='test-attribute'
      title='&image_attribute;'
      xmlns='http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul'
      ondialogaccept='return;'
      ondialogcancel='return;'>

   <grid id="contents">

      <columns>
         <column/>
         <column flex='1'/>
      </columns>
      <rows>
         <row>
            <vbox>
               <spacer flex="1"/>

               <description value='&album;'/>
               <spacer flex="1"/>

            </vbox>
            <vbox>
               <spacer flex="1"/>

               <menulist tabindex='1' id="album_list">

                  <menupopup>
                     <menuitem label="1"/>
                     <menuitem label="2"/>
                     <menuitem label="3"/>
                     <menuitem label="4"/>
                     <menuitem label="5"/>
                  </menupopup>

               </menulist>

               <spacer flex="1"/>

            </vbox>
         </row>
      </rows>
   </grid>

</dialog>


 また以下の URL からテスト用の拡張本体をダウンロード可能です。
    http://dl.getdropbox.com/u/216524/test.xpi

 以上、お智慧を拝借できれば幸いです。

作成者:  mitsugu [ 2009年9月15日(火) 11:03 ]
記事の件名:  Re: dropハンドラ内でダイアログ・ボックスを使いたい

 とりあえず、作成中の拡張に対して、drop イベントハンドラ内ではダイアログボックスを開かない、という回避策を採りました。そのため、この質問は危急のものではなくなりました。

# 後学のため、もしよろしければ解決方法を後教示賜われば幸いです。

作成者:  Piro [ 2009年9月22日(火) 00:09 ]
記事の件名:  Re: dropハンドラ内でダイアログ・ボックスを使いたい

Windows VistaのFirefox 3.5で試した限り、特に問題なく動いているようです。
理屈の上では問題が起こりえない部分なので、Firefoxのバグだと思いますが……(ひょっとしてLinux限定?)
ありがちな回避方法としては、onDrop()のタイミングでwindow.setTimeout()を呼んで、数ミリ秒後にダイアログを開かせるとかそんな感じでしょうか。

作成者:  mitsugu [ 2009年9月22日(火) 10:06 ]
記事の件名:  Re: dropハンドラ内でダイアログ・ボックスを使いたい

Piroさん さんが書きました:
Windows VistaのFirefox 3.5で試した限り、特に問題なく動いているようです。

 Vista の Firefox3.5 で動いてますか?つい先ほど友人に Vista マシンを借りてテストしてみたところ、Drop イベントをひらうことができていません。toolkit 内で "tranceferData.first is null" というエラーが発生しています。

ページ 11 All times are UTC + 9 hours
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/