FC2ブログ
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
Thunderbirdのアドオン作りをちまちまと続けていましたが、
自分の中で需要が途絶えたので開発を中止しました。
転職にともない、需要が大幅に変化したためです。
まぁ別に続きを待ちわびていた人もいないはずですが。

その代わりに、自分の中で需要があったFirefoxのアドオンを作ることにしたのですが、
どうにもおかしなことがあったのでとりあえず裏書きしておきます。

Firefoxでページ(タブ)を開くごとにある処理を行わせるアドオンを作成
したのですが、どうにも動きがおかしかったのです。
具体的には、ページの読み込みが完了したタイミングでHTMLを
編集する処理を組み込んだのですが、複数のタブを一気に開くと、
あるタブの内容が別のタブとまったく同じ内容になってしまう現象が
みられました。コード的には以下のようなもので、onLoadイベントを
拾うListenerをブラウザに組み込みました。



window.addEventListener(
  "load",
  function() {
    処理;
  },
  false);


いろいろしらべてみたのですが挙動が理解不能で、
最終的にはスタック配列とsetInterval関数を使って、
Onloadが発生したページを一つずつ処理をするように修正したことで
想定どおり動くようになりました。

不具合の原因は私が思うには、JavaScriptはマルチスレッド処理ができないのに
それを無理やりやらせようとしたことじゃないかと思います。

もしも同じようなことをして、とくに不具合もなく動いてるよーって人は
ぜひ連絡ください。
関連記事
スポンサーサイト

コメント

tabbrowser要素は内部に複数のbrowser要素を持っています(DOM Inspectorで中を見てみると分かります)。このようなケースでは、loadイベントを拾った後で、そのイベントがどのbrowser要素から送られてきたかを特定してやる必要があります。

拙作アドオン「情報化タブ」では、タブごとの読み込みの進捗状況を把握するために、タブを開いたタイミングでそのタブに対応するbrowser要素の監視を開始するようにしています。このようにすれば、他のタブで発生したloadイベントの影響を受けずに済むようになると思います。

http://piro.sakura.ne.jp/xul/_informationaltab.html
ソース:https://www.cozmixng.org/repos/piro/informationaltab/trunk/content/informationaltab/informationaltab.js

具体的には以下の箇所の実装が参考になるのではないでしょうか。
InformationalTabService.init()
InformationalTabService.initTabBrowser()
InformationalTabService.initTab()
コメントありがとうございます。
返事が遅くなってもうしわけないです。

やはり私のやり方がいまいちだったんですね。
いただいた情報、よく見ておきます。

コメントの投稿

  • URL
  • コメント
  • パスワード
  • 秘密
  • 管理者にだけ表示を許可する

トラックバック

トラックバックURL:http://remotehost.blog54.fc2.com/tb.php/27-b25b99c0
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。