MozillaZine.jp フォーラム https://forums.mozillazine.jp/ |
|
[XULRunner]XULRunner 1.9.0.3 と Firefox 3.0.3 でコードの挙動が異なる https://forums.mozillazine.jp/viewtopic.php?f=28&t=7885 |
ページ 1 / 1 |
作成者: | mitsugu [ 2008年10月14日(火) 07:19 ] |
記事の件名: | [XULRunner]XULRunner 1.9.0.3 と Firefox 3.0.3 でコードの挙動が異なる |
【現象】 以下の XUL の button 要素の onclick と onkeypress イベントで getAddress() という関数を呼んでいるが、Firefox 3.0.3 では常に機能するにも関わらず、ある条件下において XULRunner 1.9.0.3 では、getAddress() 関数が機能しない。 コード: <window id='edit-address' title='&edit_address_title;' xmlns='http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul' onload="init();"> <script type="application/x-javascript" src="chrome://addressbook/content/edit_address.js"/> [略] <row> <vbox> <spacer flex="1"/> <description id='zip_code_label' value='&zip_code;'/> <spacer flex="1"/> </vbox> <hbox> <textbox tabindex='3' id='zip_code1' value='' cols='3' min='3'/> <vbox> <spacer flex="1"/> <description id='zip_tarm' value='−'/> <spacer flex="1"/> </vbox> <textbox tabindex='4' id='zip_code2' value='' cols='4' min='4'/> <button tabindex='5' id='search_from_zip' label='&zip_search;' tooltiptext='&zip_search_text;' onclick="getAddress();" onkeypress="getAddress();" /> </hbox> </row> 【getAddress() のコード】 コード: function getAddress() { // Create object to got ZipCode from XUL Element var ctrlZipCode = getZipTextBox; var zipCode1; var zipCode2; // Create object to set Address to XUL Element var ctrlAddress = setAddressTextBox; // Create zip database instance var zipTable = zipDB; // Initialize zip database if((zipTable.init())==false) return; // Connect zip database if((zipTable.open())==false) return; // Get zip code zipCode1 = ctrlZipCode.getZipCode('zip_code1'); zipCode2 = ctrlZipCode.getZipCode('zip_code2'); // Get address from zip database if((zipTable.getAddress(zipCode1,zipCode2))==false) ←ここが XULRunner だと機能しない return; // set address ctrlAddress.setAddress('ctr_edit_address1',zipTable.address1); ctrlAddress.setAddress('ctr_edit_address2',zipTable.address2); // Disconnect zip database zipTable.close(); }; 【zipTable.getAddress(zipCode1,zipCode2) のコード】 コード: const zipDB = {
[略] getAddress: function(pZip1,pZip2) { var result; if ((pZip1=='') || (pZip2=='')) { this.dispErrorMessage('inputZipCode'); return false; } else if ((3!=pZip1.length)||(4!=pZip2.length)) { this.dispErrorMessage('invalidZipCodeSize'); return false; } var statement = this.mDBConn.createStatement("SELECT pref,city,town FROM zip_table WHERE zip_code = ?1"); try { // Get address from zip database this.zipCode = pZip1+pZip2 statement.bindUTF8StringParameter(0,this.zipCode); while(statement.executeStep()){ this.pref[this.zipLength] = statement.getUTF8String(0); this.city[this.zipLength] = statement.getUTF8String(1); this.town[this.zipLength] = statement.getUTF8String(2); this.zipLength++; } statement.reset(); if(this.zipLength==0) { this.dispErrorMessage('nothingAddress'); this.mDBConn.finalize(); this.mDBConn.close(); return false; } } catch(e) { // Oh My!! We can't get address from zip database. orz this.dispErrorMessage('cannotSelectAddressData'); this.mDBConn.finalize(); this.mDBConn.close(); return false; } if (1<this.zipLength) { // Create common data strage Application.storage.set('noAddress', this.selectAddress); // Case of many result!! We must select one of them.Because we never lost the letter or postcard. openDialog('select_address.xul','','',this.zipLength,this.pref,this.city,this.town); ← XULRunner ではこの openDailog で失敗する。 this.selectAddress = Application.storage.get('noAddress', -1); if (0<=this.selectAddress) { this.address1 = this.pref[this.selectAddress]+this.city[this.selectAddress]; if ('以下に掲載がない場合'!=this.town[this.selectAddress]) { this.address2 = this.town[this.selectAddress]; } return true; } } else { // Case of one result this.address1 = this.pref[0]+this.city[0]; this.address2 = this.town[0]; return true; } } }; 【発生条件】 id=zip_code1 の textbox 要素の値が "004" かつ id=zip_code2 の textbox 要素の値が "0000" 【本来の動作】 二つの住所から片方を選択するダイアログが開く ( Firefox 3.0.3 では動作する )。 【環境】 WindowsXP、Windows2000、Ubuntu 8.04.1 Firefox 3.0.3 XULRunner 1.9.0.3 【ナイトリー配布場所】 http://www.hcn.zaq.ne.jp/cahpa908/ |
作成者: | あ [ 2008年10月14日(火) 22:27 ] |
記事の件名: | Re: [XULRunner]XULRunner 1.9.0.3 と Firefox 3.0.3 でコードの挙動が異なる |
mitsugu さんが書きました: button 要素の onclick と onkeypress イベントで 普通にボタンを働かせる状況なら、oncommand だと思います。 click や keypress の時点では、本来ボタンを働かせるタイミングではないので、そこで処理する内容によっては何かと不都合が起こります。 mitsugu さんが書きました: Firefox 3.0.3 では常に機能するにも関わらず、ある条件下において XULRunner 1.9.0.3 では、getAddress() 関数が機能しない。
FUEL の Application オブジェクトを使っているようですが、FUEL がなくても大丈夫な作りにはなっているでしょうか。 XULRunner は Firefox ではありませんので、Firefox User Extension Library は同梱されていません。 |
作成者: | mitsugu [ 2008年10月15日(水) 08:36 ] |
記事の件名: | Re: [XULRunner]XULRunner 1.9.0.3 と Firefox 3.0.3 でコードの挙動が異なる |
あさん さんが書きました: 普通にボタンを働かせる状況なら、oncommand だと思います。 click や keypress の時点では、本来ボタンを働かせるタイミングではないので、そこで処理する内容によっては何かと不都合が起こります。 そうでしたか。書き直します。 あさん さんが書きました: FUEL の Application オブジェクトを使っているようですが、FUEL がなくても大丈夫な作りにはなっているでしょうか。
XULRunner は Firefox ではありませんので、Firefox User Extension Library は同梱されていません。 Application オブジェクトは、Firefox User Extension Library に入っているのですか。XULRunner は Firefox のコア部分を抜き出してランタイム環境として再構築しているものと思って、Application オブジェクトをなにも考えずに使っていました。 他の方法を試してみます。 有難うございました。 |
作成者: | mitsugu [ 2008年10月15日(水) 09:39 ] |
記事の件名: | Re: [XULRunner]XULRunner 1.9.0.3 と Firefox 3.0.3 でコードの挙動が異なる |
引数を渡してダイアログを表示するという非常にシンプルな方法を MDC で見つけたので、コードをそのように書き換えました。 【呼出側】 コード: const zipDB = { file: null, storageService: null, mDBconn: null, zipCode: null, zipLength: 0, pref: [], city: [], town: [], address1: null, address2: null, selectAddress: -1, [略] openDialog('select_address.xul','','',this.zipLength,this.pref,this.city,this.town,this); if (0<=this.selectAddress) { this.address1 = this.pref[this.selectAddress]+this.city[this.selectAddress]; if ('以下に掲載がない場合'!=this.town[this.selectAddress]) { this.address2 = this.town[this.selectAddress]; } return true; } 【ダイアログ側】 コード: function doOk()
{ var i; for (i=0;i<maxAddress;i++) { if(document.getElementsByTagName('menupopup').item(0).childNodes.item(i).selected==true) { break; } } if (i<maxAddress) { window.arguments[4].selectAddress = i; } return; } あさん、アドバイス有難うございました。 |
作成者: | あ [ 2008年10月20日(月) 21:35 ] |
記事の件名: | Re: [XULRunner]XULRunner 1.9.0.3 と Firefox 3.0.3 でコードの挙動が異なる |
mitsugu さんが書きました: Application オブジェクトは、Firefox User Extension Library に入っているのですか。XULRunner は Firefox のコア部分を抜き出してランタイム環境として再構築しているものと思って、
XULRunner は Firefox のコア部分と言っても良いとは思いますが、Application オブジェクトが入っている FUEL は、ガワの方に含まれています。 |
ページ 1 / 1 | All times are UTC + 9 hours |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |