過去ログ表示


過去ログ 309 を表示

トピック内全 8 記事中の 1 〜 8 番目を表示
[ 最新記事及び返信フォームをトピックトップへ ]
このトピックの全ページ / [0]

XPconnectについて。
(#47530) このトピック中1番目の投稿
(環境: WinXP SP3/Firefox3.0)

現在、XPconnectの勉強中です。
XPconnectを使ってブラウザのタブを数えるなどはできたのですが
自作のXPCOMを呼び出そうとすると以下のメッセージがでます。

alert(自作関数名)とすると
「object HTML ObjectElement」
と表示されます。

詳細が書けず申し訳ありませんが、このメッセージの意味が
分かる方がいらしたら教えてください。
また、javascript側から呼び出し可能な関数はVisualStudioの
ように表示させるのは無理でしょうか。

自分でも試行錯誤でよく分からず書かせてもらって済みません。
アドバイスなどいただけると助かります。よろしくお願いします。

Re: XPconnectについて。
(#47531) このトピック中2番目の投稿
(環境: WinXP SP3/SeaMonkey1.1)

> 自作のXPCOMを呼び出そうとすると以下のメッセージがでます。
>
> alert(自作関数名)とすると
> 「object HTML ObjectElement」
> と表示されます。

どのようなメッセージですか?
"¥n"というメッセージですか?
"¥nalert(自作関数名)とすると¥n「...」¥n表示されます。"というメッセージですか?

HTMLの中のJavaScriptの場合ですが、document.getElementByIdやdocument.getElementById.toStringに対してString(...)を行うと、以下のようになります。
> function getElementById() { [native code] }
> function toString() { [native code] }
XPCOMで定義されたものの場合はこのように表示されるようです。
XPCOM側に定義してあるtoStringで行っているのだと思います。

alert(xxx)はalert(String(xxx))と同等で、xxxがオブジェクトの場合、alert(xxx.toString())と同値だったと思います。
toStringはきちんと定義されていますか?
prototypeチェーンをたどっていって最初に見つかるtoStringがObjectオブジェクトのものだと、そうなるような気が...

また、XPCOMのfunctionは、JavaScriptのfunctionオブジェクトそのものではないので、
以下のようなコーディングだとスクリプトエラーになる、という制限が、現時点ではあります。
(コードの変更が膨大になるので、全部をC++オブジェクトに切り替えるまでは直せない、ということみたいです。)
> var abc=document.getElementById; var xyz=abc("id_x"); => エラー
> var xyz=document.getElementById("id_x"); とまじめに書くか、
> function abc(id){return document.getElementById(id);} var xyz=abc("id_x"); > としないといけない。
このような書き方をしていませんか?

Re: XPconnectについて。
(#47532) このトピック中3番目の投稿
(環境: Linux/Other)

 はじめまして。野良拡張を日常的に作ってる者です。
> alert(自作関数名)とすると
> 「object HTML ObjectElement」
> と表示されます。
 これはデバッグを alert の出力でやっているという理解でいいですか?
 もしそうなら、単純に masa さんの自作関数が HTML 要素を返していることを示しています。要素自体は DOM 上オブジェクトですので、数値が表示されたり、文字列が表示されることはありません。

# DOM については MDC の他に http://www.doraneko.org/misc/dom10/19981001/cover.html
# あたりも参考にされた方がよいかと思います。
# リンク先は DOM Level 1 の邦訳ですが、一度理解してしまえば Level2、Level3
# の仕様書は原文で読めると思います。

Re: XPconnectについて。
(#47578) このトピック中4番目の投稿
(環境: Mac/Firefox3.0)

> 自作のXPCOMを呼び出そうとすると以下のメッセージがでます。
>
> alert(自作関数名)とすると
> 「object HTML ObjectElement」
> と表示されます。
>
> 詳細が書けず申し訳ありませんが、このメッセージの意味が
> 分かる方がいらしたら教えてください。

「自作関数名」の評価結果が、HTML の OBJECT 要素だったということです。
自作関数だと思っていた物が、実は関数ではなかったのではないでしょうか。
XPConnect 経由の関数であれば

function 自作関数名() {
[native code]
}

と表示されます。

あるいは、alert(自作関数名()) の間違いでしょうか。


> また、javascript側から呼び出し可能な関数はVisualStudioの
> ように表示させるのは無理でしょうか。

VisualStudioのように、というのがよくわかりませんが DOM ツリー上のオブジェクトに入れてしまえば、DOM Inspector で見えます。

Re: XPconnectについて。
(#47739) このトピック中5番目の投稿
(環境: WinXP SP3/Firefox3.0)

WADA様、絶滅危惧種IA類様、あ様
 アドバイスありがとうございます。返信が遅くなり済みません。
皆様にアドバイスいただいた内容試してみました。
やはり、XPconnectとXPCOMの定義が正しく無いようで自作関数が
読み込まれていないのが分かりました。

DOMの理解不足も大きいというのも分かりました。
詳しくアドバイスいただいたのに不明瞭な回答で済みません。

追加で教えていただけたらありがたいのですが。
XPCOMやXPconnectで自作関数を動かす方法について分かりやすい本や
webなど教えていただけると大変ありがたいです。

よろしくお願いします。

Re: XPconnectについて。
(#47741) このトピック中6番目の投稿
(環境: Linux/Other)

 ちょっと整理させていただくと
・XPCOM を拡張されようとしている
・JavaScript 側でデバックされようとしている
という理解でよろしいですか?
 もしそうなら mozilla developer center 以上の資料は現存しないと思います。XPCOM の拡張コードは C で書かれてるんですよね?

Re: XPconnectについて。
(#47781) このトピック中7番目の投稿
(環境: WinXP SP3/Firefox3.0)

>  ちょっと整理させていただくと
> ・XPCOM を拡張されようとしている
> ・JavaScript 側でデバックされようとしている
> という理解でよろしいですか?
>  もしそうなら mozilla developer center 以上の資料は現存しないと思います。XPCOM の拡張コードは C で書かれてるんですよね?

返信ありがとうございます。
はい。整理していただいた通りです。拡張コードもC(C++)です。
HTMLでボタンを押すと自作のXPCOM関数を呼び出して結果を返すようにしたいです。
やはり、mozilla developer centerが一番ですか。
もう一度良く読んで勉強します。

Re: XPconnectについて。
(#47803) このトピック中8番目の投稿
(環境: Linux/Other)

 一般論になってしまいますが、動的ライブラリとしての単体テストを終えてから、idl 定義に間違いがないことをたしかめ、その後 chrome スキームで動作する JavaScript から呼び出して最終テストをする、というように手順を踏んで作業されることをお薦めします。
 やはり C や C++ の単体テストは、それらの言語に対応した IDE 上で行う方が効率が良いと思います。


このトピックの全ページ / [0]

返信不可


- Child Tree -