― MozillaZine.jp フォーラムは Mozilla 製品に関する情報交換の場です ―



All times are UTC + 9 hours

新しいトピックを投稿する トピックへ返信する  [ 3 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 2013年12月26日(木) 10:49 
オフライン

登録日時: 2013年12月26日(木) 09:33
記事: 686
お住まい: 太陽系、地球、日本、ふてニャン県
Thunderbird 17の頃からなんですが、自作のXULのスクリプトのシンタックスエラーがエラーコンソールに出なくなってしまい、Tb 24でもそうです、
全体をtry/catchでくくって自分でフックしようとしても、シンタックスエラーのためにアドオンのスクリプトが実行されないので、意味がない(^^:
今のところ、全然動かなかったらTb 10ESRでエラーがでないことを確認してTb24で動作確認、で逃げられているんですけどね。

どこかの設定で、エラーコンソールに表示する・しない、を制御できるのでしょうか。
chrome.mnifestやinstall.rdfの記述に問題があるのかな?
あるいは、<script>を書く場所の問題?
ToolBarボタンそのものではなくToolBarパレットに登録し、ToolBarのカストマイズでボタンを登録するようにしていて、それも、ToolBarではなくMenuBarにボタンを入れた、ということが関係するのかな?

現在アドオンを置いてあるURLです。
http://www.h2.dion.ne.jp/~radon/mozilla ... 0-003.html
単に各種のオブジェクトをエラーコンソールにダンプするのが目的なんですが、メモリーリークを引き起こすテストケースや、クラッシュが起こるテストケースもあるので、基本は非公開の個人用アドオンです。
名前の意味は「TbがGmail IMAPで常に[Gmail]/Trashをtrashにするので、他のmboxを無理矢理trashにしてしまう」。
Folder re-discoveryで[Gmail]/Trashに戻してしまうので意味が無いのですが、一時的にせよ、Tbに逆らって好みのmboxにtrashアイコンをセットできるので、気分転換ができる(^^)

_________________
Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36


通報する
ページトップ
 プロフィール  
引用付きで返信する  
投稿記事Posted: 2013年12月26日(木) 17:52 
オフライン

登録日時: 2013年12月26日(木) 09:33
記事: 686
お住まい: 太陽系、地球、日本、ふてニャン県
追記です。

普通と異なるのは、JSファイルのロード時に実行されるのは、このアドオン用の唯一のグローバルオブジェクト(window.XYZのようなグローバル変数)の定義と、そのいくつかのプロパティーの値のセットと、多くの関数を、その唯一のグローバルオブジェクトのプロパティーとして定義しているだけ、ということです。
JSファイルの中には、functionステートメントはありません。
ほぼ全てが、ボタンクリックの後のグローバルオブジェクトのプロパティーのfunctionのコール、になっていて、いくつかは、イベントハンドラーやイベントリスナーとして使うようになっています。
これは、windowのプロパティー(グローバル変数)のバッティングや、varやletを書き忘れてwindow.xyzを壊してしまうことを減らすためです。
Objectオブジェクトの定義をしているだけですから、JSファイルのロード時のシンタックスチェックには、まず引っかかりません。

実行時に判明するシンタックスエラーや未定義変数の参照エラーなどは、エラーのあるブロックが大体わかっている時には、try/catchでほぼ引っ掛けられるのですが、何箇所か書き換えていたり重要な場所でのエラーで何も実行されないような場合には、エラーコンソールにエラーメッセージがでてくれないと、手も足もでない状態になってしまいます(^^;

_________________
Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36


通報する
ページトップ
 プロフィール  
引用付きで返信する  
投稿記事Posted: 2014年3月07日(金) 11:58 
オフライン

登録日時: 2013年12月26日(木) 09:33
記事: 686
お住まい: 太陽系、地球、日本、ふてニャン県
ほぼ、「自己解決」、です。

回避策:
JavaScript Code ModuleにしてComponents.utils.import("resource://app名/ファイル名.jsm",オブジェクト名); を使う。

importユーティリティがロード時にシンタックスエラーを検出すると、エラーメッセージをだしてくれます。
その上、ファイル名.jsmの中で、Components.utils.import("resource://app名/子供のファイル名.jsm",オブジェクト名); を使えば、階層化できるので、
あるオブジェクト内の個々のfunctionにつき一つの.jsmファイル、ということも非常に簡単にできて、便利。
Singletonなので、各XULウィンドウのwindowごとにコードを持たずに済み、メモリー消費量の節約にもなるし、
app名さえユニークであればいいので、グローバル変数の衝突の回避も、非常に楽にできますし、
複数のAdd-Onに分けてSingletonを共有、ということも、簡単にできます。

もっとも、各XULウィンドウのwindowとかdocumentには直接アクセスできないので、
それぞれのXULウィンドウの、windowとかdocumentとかwindow.自分のグローバル変数、などは、パラメーターで渡すとか、オブジェクトのプロパティーとして入れておく、などが常に必要になり、
今あるコードを全てSingletonのオブジェクトに移行するのは、ちょっと手間がかかりますけど。
Singletonのオブジェクトとして使い、functionは、オブジェクトメソッドとして定義してあって、this.プロパティを扱う、という場合には楽なんですが、
Singletonのコードライブラリーとして使うには、当然ですが、functionの中に必ず、Components.utils.import("resource://app名/子供のファイル名.jsm",オブジェクト名); を書いておかないといけない。
Components.utils.import(... と書いておくだけでいい、という話ではあるんですけどね。

_________________
Mozilla/5.0 (Windows NT 5.1; rv:22.0) Gecko/20100101 Firefox/22.0 SeaMonkey/2.19


通報する
ページトップ
 プロフィール  
引用付きで返信する  
期間内表示:  ソート  
新しいトピックを投稿する トピックへ返信する  [ 3 件の記事 ] 

All times are UTC + 9 hours


オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[40人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
Powered by MozillaZine.jp® Forum Software © phpBB Group , Almsamim WYSIWYG
Japanese translation principally by ocean