トップページ⇒tech
1001コメント388KB

Mozillaでプログラミング(XUL)

■ このスレッドは過去ログ倉庫に格納されています
0001MozillerNGNG
ム板住人のうちMozilla使ってる人は何%くらいかわかりませんが、
Mozilla 1.0 RC1がリリースされ、
XUL 1.0の仕様が一応フリーズしました。
なので、そろそろXULアプリケーションも出始めることでしょうし(希望的観測)
MozillaでのXULプログラミングについて騙りませんか。

Mozillaスレッド M10
http://pc.2ch.net/test/read.cgi/software/1019550671/
0796デフォルトの名無しさんNGNG
>>795
mozilla 1.6 で試してみたけど…
doc.async = false;
var result = doc.load(URI);
alert(result);
してみると doc.load(URI) が false が返してくるみたいね… なんでだろ??

XUL内に不可視のbrowser要素を配置してそこにloadURI()で読み込んだら
だめかな?
0797デフォルトの名無しさんNGNG
>>795
ありがちなミスだけど、ひょっとして、XULでやってる?
createDocumentのnamespaceを無指定にすると、実行環境に影響されるから、
HTMLDocumentではなく、XULDocumentになって、htmlファイルをロードできない。
0798デフォルトの名無しさんNGNG
>>796
hidden=trueなbrowserに対してloadURIでHTMLをロードさせたら
Type Error: this.docShell has no properties
と怒られました。

>>797
なるほど、確かにXULでやってました。
0799デフォルトの名無しさんNGNG
>>798
hidden="true" (displaynone)だと初期化がされないので注意が必要。
collapsed="true" (visibility:collapse)なら動くはず。
0800デフォルトの名無しさんNGNG
>>799
なるほど、それでうまくいきました。
0801デフォルトの名無しさんNGNG
>>797

>createDocumentのnamespaceを無指定にすると、
ってことは正しい(?)指定をするとXULでもHTMLDocumentが返ってくる
ようになるんでしょうか?
0802デフォルトの名無しさんNGNG
>>801
いろいろ探してみたけど、HTMLDocumentを作るのって意外に難しい。
doctypeを決め打ちしてしまうと本末転倒だから、やっぱ無理かも。
xhtmlならとても簡単なのに、この差は一体…
0803デフォルトの名無しさんNGNG
XULアプリ内で mozilla と firefox を区別する方法ってないですかね??
0804デフォルトの名無しさんNGNG
>>803
browser.jarのあるなしを見るとか、

function browserURI()
{
var handler = Components.classes['@mozilla.org/commandlinehandler/general-startup;1?type=browser'].getService(Components.interfaces.nsICmdLineHandler);
var uri = handler.chromeUrlForTask;
if (uri.charAt(uri.length-1) == '/')
uri = uri.replace(/chrome:\/\/([^\/]+)\/content\//, 'chrome://$1/content/$1.xul');
return uri;
}
でchrome://browser/content/browser.xulが帰ってくるかどうかを調べるとか。
0805デフォルトの名無しさんNGNG
piro氏のTBEはインスコ時に判定しとくって手を使ってるみたいね
0806デフォルトの名無しさんNGNG
インスコ時はbrowser.jarを見て、
インストール後の動作では>804の後者の方法を使ってます。
0807デフォルトの名無しさんNGNG
>>803
firefox 0.9以上なら新しいEM用なのか
about:configのapp:idにFirefoxのGUIDが書き込まれてます
インストール後なら、これを見て判断するというのはどうでしょう?
0808デフォルトの名無しさんNGNG
fileスキームのURIで示されたローカルファイルを削除する方法はありませんか?
たとえばfile:///C:/foo/bar.jpgだったり、file:///home/nanashi/bar.jpgだったり、
OSに依存しない方法があればいいのですが。
0809デフォルトの名無しさんNGNG
jslib使うとかそこからコードをぱくるとか
0810デフォルトの名無しさんNGNG
ってかただaFile.remove(true)でいいっぽい
0811デフォルトの名無しさんNGNG
ファイルのURIからnsIFileは作れないようです。
var aFile = Components.classes['@mozilla.org/file/local;1']
.createInstance(Components.interfaces.nsILocalFile);
aFile.initWithPath("file:///C:/foo/bar.jpg");

で、パスが認識できないと怒られます。
0812デフォルトの名無しさんNGNG
>>811
ttp://white.sakura.ne.jp/~piro/xul/tips/x0011.html
0813デフォルトの名無しさんNGNG
>>812
ああ、まさにそちらに書いてあるとおりのことでした!
ありがとうございました。
0814デフォルトの名無しさんNGNG
で、だれか
http://www.unixuser.jp/magazine/2004/200409.html
買ってないの?
0815デフォルトの名無しさんNGNG
仲村直人って意外な趣味持ってるんだな。
http://www.jbl.or.jp/allstar/200304/member/b09_nakamura.html
0816デフォルトの名無しさんNGNG
見事に同姓同名だな
0817デフォルトの名無しさんNGNG
ttp://nazo.europe.webmatrixhosting.net/mimetype.aspx/newEmFolder?name=newEmFolder.xpi&type=application/x-xpinstall&location=http://nazo.europe.webmatrixhosting.net/ex/newEmFolder.zip
0818デフォルトの名無しさんNGNG
保守
0819デフォルトの名無しさんNGNG
現在フォーカスしているブラウザタブのアイコン(いわゆるfavicon)のURLを得る方法を模索しています。
top.window.document.getElementById("page-proxy-favicon").src
でとりあえずそれらしいものは得られるのですが…
0820デフォルトの名無しさんNGNG
>>819
gBrowser.selectedTab.getAttribute('image')でどうでしょう。
空以外ならfaviconと判断できそうな。
0821819NGNG
>>820
それでばっちりでした。どうもありがとうございました。
0822デフォルトの名無しさんNGNG
a.xulからopenDialog('b.xul')でダイアログを開き、そこでの入力結果をa.xulに返す
というかb.xulでの入力結果をa.xulで受け取る方法はありますでしょうか?

ただの文字列を入力させるだけなら、a.xulでvar input = prompt(...)で入力を受け取れますが、
今回はユーザに入力させたい項目が複数あるという状況であります。
0823デフォルトの名無しさんNGNG
>>822
b.xul から window.opener で a.xul にアクセスできるようだ。

使用例(JavaScript の詳細設定ダイアログ):
http://lxr.mozilla.org/mozilla/source/browser/components/prefwindow/content/pref-advancedscripts.xul#56
0824デフォルトの名無しさんNGNG
>>823
今試してできました。見事に簡単ですね!
0825デフォルトの名無しさんNGNG
>>822
openDialogは4番目以降の引数に任意のものを渡せます。
オブジェクトを渡せば処理結果を得ることもできます。

//a.xul
var obj = {};
window.openDialog('b.xul', '_blank', 'chrome,dialog,modal', obj);
alert(obj.result);

//b.xul
<dialog onaccept="window.arguments[0].result = document.getElemenntById('input').value; window.close()">
<textbox id="input"/>
</dialog>

モーダルダイアログにしないと処理結果を返す前にa.xulの処理が先に進んでしまうので注意。
0826デフォルトの名無しさんNGNG
//a.xul
var input = {};
window.openDialog('b.xul',...);

//b.xul
<dialog onaccept="window.opener.input.hoge = ...">

と書きましたが825さんの書き方もいいですね。
0827デフォルトの名無しさんNGNG
初めまして。
「ブラウジングの際に次ページをポップアップ表示する」という機能を作成しようとしています。
そこで質問なのですが、createElementNS()で作成したウインドウ(例えばAltポップアップのようなもの)の中に
Webページを表示することは可能でしょうか?
Elementをポップアップするより、window.openしちゃったほうがいいのかなぁ・・・
0828デフォルトの名無しさんNGNG
http://patsis.edula.com/extxpi.html
このLink Previewという拡張が似てますが、これはOpen Thumbshotsのサムネイル画像を
表示させているみたいです。ごく一部のサイトしかサムネイルが表示されません。
XUL側でWebページのサムネイル画像を作れたらいいですけど、ちょっと無理そうですね。
0829デフォルトの名無しさんNGNG
>>827,828
<button tooltip="hogetip" label="hoge" />
<tooltip id="hogetip"><iframe src="about:mozilla" /></tooltip>
とやってやれば、別ページをポップアップ表示することは"一応"できるようだが、
サムネイルを作る方法 or ページ表示を縮小する方法を知らないので教えられない。
0830デフォルトの名無しさんNGNG
ttp://multiscroll.mozdev.org/
これの縮小表示機能が参考になるかも
0831デフォルトの名無しさんNGNG
>>828, >>829, >>830
ありがとうございます! 参考にさせていただきます!

>>828の拡張は画像で表示するんですよね。
ポップアップしたページからまたポップアップ……と階層的に表示したいと考えているので確かにそれだと無理そうです。

>>830のようにページ表示を縮小する方向で作ってみることにします。
0832デフォルトの名無しさんNGNG
overlayで存続の要素を削除できますか?
0833デフォルトの名無しさんNGNG
>>832
存続の要素って?
0834デフォルトの名無しさんNGNG
既存の間違い?
0835デフォルトの名無しさんNGNG
>>834
そうです。
結局styleでdisplay:noneにして解決しました。
0836デフォルトの名無しさんNGNG
拡張でstyleを指定するのは、あまりよろしくない。
hiddenプロパティの方がいい。
0837デフォルトの名無しさんNGNG
xul.cssには

*[hidden="true"] { display: none; }

と書いてあるんだけどね。
0838デフォルトの名無しさんNGNG
>>837
そういう問題ではない。
0839デフォルトの名無しさんNGNG
>>836
何故でしょうか?
stylesheetをオーバーレイさせて、ほぼ一意性があるようにセレクタを設定しました。
そこを追加・削除できる拡張とバッティングするはずですが、hiddenプロパティーでも同じはずなので一番いいのはDOMで要素ごと削除だと思いますが、ちょっとめんどくさい…

#日本語って難しい
0840デフォルトの名無しさんNGNG
ほぼ一意性があると思ってるんならそれでいいんじゃない?
DOMで要素を削除するのはやめた方がいい。
0841デフォルトの名無しさんNGNG
0.9対応の拡張を1.0対応にさせるにあたって、変更すべきところは
install.rdfの対応バージョンのところだけでしょうか。
0842デフォルトの名無しさんNGNG
ローカルファイルの変更を監視してイベントを発せさせるようなことはできますか?
0843デフォルトの名無しさんNGNG
>>802
いまのところ、URLからHTMLDocumentオブジェクトを作るのはできないのでしょうか?
browser要素などを隠してdocumentを得るのはダサいですよね。
HTMLDocumentからanchorエレメントを得て先読みするものを作りたいのですが
何かいい方法内でしょうか?
あと、DOMImplementationのcreateDocumentからHTMLDocumentが返ってくることって
あるんですかねぇ。
XMLDocumentだとできるようだが・・・。
0844デフォルトの名無しさんNGNG
>>828-829
サムネイルを作るというかスクリーンキャプチャ撮影のインターフェースならあるようなのですが、
実装はされていないようですね。

http://xulplanet.com/references/xpcomref/ifaces/inIScreenCapturer.html
0845デフォルトの名無しさんNGNG
>>795-802, >>843
nsIDocumentLoaderFactory というのを発見したので、試しに
Components.classes["@mozilla.org/content-viewer-factory/view;1?type=text/html"]
を呼んでみたが、実装されていないのか動かない。
0846845NGNG
Components.classes["@mozilla.org/content/document-loader-factory;1"].createInstance(Components.interfaces.nsIDocumentLoaderFactory)
はきちんと返しているみたいだけれども、
nsIDocumentLoaderFactory::createBlankDocument(in nsILoadGroup, out retval nsISomething);
の引数である nsILoadGroup の扱い方がわからなかった。
0847845NGNG
開きなおって、webShell から作ってしまうことにしたら HTMLDocument が得られるm模様。すなわち:

var webnavi = Components.classes["@mozilla.org/webshell;1"]
.createInstance(Components.interfaces.nsIWebNavigation);
webnavi.loadURI("about:blank", 0, null, null, null);
webnavi.document;

を JavaScript Console に投げ込むと、[object HTMLDocument] が手に入れられた。

>>353
こういうのをまとめる Wiki みたいのがあると便利だな...
0848デフォルトの名無しさんNGNG
>>847
Firefoxまとめサイトにそういうページを作ればいいのでは?
wikiの乱立はやめてほしい
0849デフォルトの名無しさんNGNG
あまり知られてないけど、mozilla.orgにもwikiあるんだよね。
http://wiki.mozilla.org/
0850デフォルトの名無しさんNGNG
>>847
確かに返ってきますね。
でも、loadURIでuriを指定してもダウンロードはしている様だけど
中身が入ってないっぽい?
0851デフォルトの名無しさんNGNG
timerかlistener使って読み込み待ちすればいいのでは?
0852デフォルトの名無しさんNGNG
SOAPのネストができないorz
SOAP_PROPERTYBAG_REQUIRED: When encoding as a struct, an object with properties is required
とかいわれる
idlist=new Array();
idlist[0]=new SOAPParameter("text","id");
idlist[1]=new SOAPParameter("text2","id");;
params[0]=new SOAPParameter(idlist,"IDList");

どうすればいいでしょうか?
0853852NGNG
ってかwsdl使えるのね
どっか解説サイトないかなぁ
0854852NGNG
やっとできた

idlist={
id:"text"
id:"text2"
}
0855デフォルトの名無しさんNGNG
ってだめだ
名前空間のの設定ができねぇorz
0856デフォルトの名無しさんNGNG
Firefox1.0PR での話なのですが、
http://www.mozilla.gr.jp/~kazhik/xul/tutorial01.html
この通りに installed-chrome.txt を記述しても、
chrome.rdf に書き込まれず、xul が追加できません。
理由が解る人が居らっしゃたら、御教え願えないでしょうか?

……install.rdf を作って、xpiでインストールするしか無いのかなぁ。
0857デフォルトの名無しさんNGNG
>>856
http://fls.moo.jp/wdiary/200406.php#d08
こっちを見た方がいいかも
0858856NGNG
>>857
おおっ、ありがとう。
試してみます。
0859デフォルトの名無しさんNGNG
Firefoxに自作の機能拡張入れてみたんだが
localeのja-JPのリソースが使用されないんですが何か設定いりますか?

自作のが駄目で、メジャーなのをいくつか入れてみたけど全部en-USのが使われました。
Firefox自体は通常インストールで何もいじっていません。
0860デフォルトの名無しさんNGNG
Firefoxのバージョンは?JLP組み込み済みの日本語版をインストールしたなら、
http://firefox.geckodev.org/?FAQ#lang-jajp
0861デフォルトの名無しさんNGNG
>>860
ありがとうございます。
ずばりそれでした。

↓も参照しました。
ttp://moz.skillup.jp/jlp/viewtopic.php?t=223

本体側の問題のようですね、1.0の時には直っていて欲しいものです。
0862デフォルトの名無しさんNGNG
Javaから使えるXUL処理系を探していて、
http://luxor-xul.sourceforge.net/
というのを見つけたんだけど、使ったことのある人いる?

http://www.javadesktop.org/forums/thread.jspa?threadID=1324&tstart=0
なんて言われていたりもするんで、どうなのかなーと思ったんだけど。
0863デフォルトの名無しさんNGNG
luxorのXULはMozillaのXULと違う所が結構あると聞いたことがある気がする
0864デフォルトの名無しさんNGNG
http://www.neowin.net/articles.php?action=more&id=96
読んで、XULRunner やる気みたいだけど実際やってんのかなぁ、と思って LXR 見たら
http://lxr.mozilla.org/mozilla/source/xulrunner/
あったよ。2,3 ヶ月したらバイナリでてくるかな?
0865デフォルトの名無しさんNGNG
>>863
結構ある、どころか全くの別物だよ。
とりあえず、このスレのXULとは何の関係もない。
0866デフォルトの名無しさんNGNG
質問です。template の構築が終了したタイミングをとるはどうやったらいいのでしょうか。
template で listbox を構築した後で、任意の要素を選択したいのです。今、↓のようにtemplate のビルドを完了したイベントを入手して処理しているのですが、しばしばビルド完成前に didRebuild が呼ばれるようで、うまくいきません。
oListbox.addListener({
didRebuild : function(aBuilder){
oListBox.selectedIndex = 1;//例えば最初のアイテムを選択してみる
},
willRebuild : function(aBuilder){},
QueryInterface : function(aIID){
if(aIID.equals(Components.interfaces.nsIXULBuilderListener)
aIID.equals(Components.interfaces.nsISupports)) return this;
throw Components.results.NS_NOINTERFACE;
}
});
0867866NGNG
訂正:oListbox.addListener(... じゃなくて oListbox.builder.addListener でした。
ttp://www.xulplanet.com/references/xpcomref/ifaces/nsIXULTemplateBuilder.html#method_addListener
0868デフォルトの名無しさんNGNG
拡張の更新確認用のrdfの書き方についてお尋ねします。

<?xml version="1.0"?>

<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:em="http://www.mozilla.org/2004/em-rdf#">

<rdf:Description about="urn:mozilla:extension:{***GID***}">
<em:version>1.0</em:version>
<em:updateLink>http://***/***/***.xpi<;/em:updateLink>
</rdf:Description>

</rdf:RDF>

以上のような書式でrdfをアップしておきました。
これに対して、install.rdfに<em:version>0.9</em:version>とした拡張を
ツール > 拡張機能 > 確認 とやってみたところ、更新されたパッケージが見つかりませんでした
になってしまいました。

おそらくはrdfの書式が間違っているか足りないのかと思いますが、
最低限の正しい書式はどのようになるか、教えていただきたいです。
0869デフォルトの名無しさんNGNG
>>868
1.0から仕様が変わりました。

是とか参考にすれば分かるはず
http://cdn.mozdev.org/updates.rdf
0870868NGNG
>>869
できました。ありがとうございました。
どうやら更新確認のrdfにもキャッシュが効いてたせいで余計混乱してたみたいです。
0871デフォルトの名無しさんNGNG
キーバインドでの質問なのです。
以下のものを *.xul で保存して Firefox(0.10.1) で読み込み、
Alt + 何か を押すと(k以外の何でも)反応してしまい、他のショートカットを上書きしてしまいます。
何が悪いのかさっぱり解らないのですが、ヒントだけも教えてもらえないでしょうか?


<?xml version="1.0"?>
<window id="keyconfigOverlay"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<keyset id="mainKeyset">
<key id="keychk" keycode="k" modifiers="alt" oncommand="alert('hoge');" />
</keyset>
</window>
0872デフォルトの名無しさんNGNG
keycode じゃなくて key
modifiers の値は alt より accel のほうがいいかも。
0873デフォルトの名無しさんNGNG
ここらあたりも読んでおくと吉かと
ttp://www.mozilla-japan.org/projects/ui/accessibility/mozkeyintro.html#modifiers
Mozilla キーボード・プラン FAQ とクロスリファレンス
0874デフォルトの名無しさんNGNG
>>872-873
ありがとう。
思い通りになりました。m(_ _)m
しかし、accelは使用済みが多いし、ctrl+altも駄目となると、結構厳しいですね……
0875デフォルトの名無しさんNGNG
俺は ctrl(accel)+shift をよく使う。空いてるし。
0876デフォルトの名無しさんNGNG
>>866 まだ見てるかな?
listbox の中身を rdf ファイルから読み込んで template で作るとき
rdf の読み込みが非同期なので template 内の要素にアクセスできないことがある。

listbox の datasources をまず rdf:null にしておいて、
var RS = Components.classes["@mozilla.org/rdf/rdf-service;1"].
getService(Components.interfaces.nsIRDFService);
var DS = RS.GetDataSourceBlocking("chrome://[rdf の場所]");
var oListBox = document.getElementById("[listbox の ID");
oListBox.database.AddDataSource(DS);
oListBox.builder.rebuild();
oListBox.selectedIndex = 1;

rdf がローカルならこれでいいんじゃないかな。
rdf がリモートなら RS.GetDataSource , DS.addXMLSinkObserver 使う。
的外れだったらスマソ
0877866NGNG
>>876
GetDataSourceBlocking ですか、ありがとうございます。ただ、これだけだと selectedIndex = 1; がうまく動きませんでした。
どうやらここでの非同期な動作は、「RDF 読み込み」と「template による要素の生成」のふたつのようで、>>876 は前者、>>866 は多分後者の処理の終了を受け取る方法だと思いました。
そこで >>876 の最後の行 oListBox.selectedIndex = 1; の手続きを >>866 の方法で行うことにしたら、正常に動作するようになりました。
0878デフォルトの名無しさんNGNG
キャッシュのすべてのエントリを取り出す方法はありませんでしょうか?
nsICacheServiceにvisitEntriesなるメソッドがあったりしますが…。
0879デフォルトの名無しさんNGNG
>>878
まさにそれですね。

var myCacheVisitor={
QueryInterface : function(aIID)
{
if (aIID.equals(Components.interfaces.nsICacheVisitor))
return this;
throw Components.results.NS_NOINTERFACE;
},
visitDevice : function(aDeviceID, aDeviceInfo){return true;},
visitEntry : function(aDeviceID, aEntryInfo){return true;}
};
こんな風に自分でオブジェクトを作って渡すと、cacheServiceが
myCacheVisitor.visitEntry(aDeviceID, aEntryInfo)を呼んでくれます。
falseを返すとそこで止まります。

ttp://developer-test.mozilla.org/xpcom/api/
こんなのがあったんですね。
公式版xulplanetか…
0880878NGNG
>>879
すげえ、できました!感動です。
0881デフォルトの名無しさんNGNG
XBL から外部の、例えば hoge.js を読み込む方法はありませんでしょうか?
0882デフォルトの名無しさんNGNG
xul の名前空間指定しておいて
<xul:script src="..."/> とか >>242-246 の mozIJSSubScriptLoader 使うとか。
chrome:// 内じゃないと無理だけど。
0883デフォルトの名無しさんNGNG
<xul:script src="..."/>はエグイな。
0884881NGNG
>>242 を参考にすることで実現できました。 882 さんありがとうございました。

<constructor><![CDATA[
const scriptLoader = Components.classes["@mozilla.org/moz/jssubscript-loader;1"]
.getService(Components.interfaces.mozIJSSubScriptLoader);
scriptLoader.loadSubScript("chrome://somepackage/content/common.js", this); //this に対して読み込む
...
]]></constructor>
0885デフォルトの名無しさんNGNG
Firefox用の拡張のロケールマニフェストに仕様変更があります。
http://www.saintpatrickdc.org/bsmedberg/register-locale.html
0886デフォルトの名無しさんNGNG
onkeypress とかのイベントハンドラでキー入力を検知できますが、
Input Method を使った(Atok,IME,ことえり,XIMとかの)日本語入力を検知する方法はありませんか?
0887デフォルトの名無しさんNGNG
>>886
C++とかでコードを書けば可能なのではないかと。
0888デフォルトの名無しさんNGNG
nsIDOMCompositionListenerをがんばって実装するしかないな。
http://lxr.mozilla.org/aviarybranch/source/dom/public/coreEvents/nsIDOMCompositionListener.h#54
0889886NGNG
nsIDOMCompositionListener::HandleEndComposition で処理できるように見えるけれども、
Components.interfaces.nsIDOMCompositionListener
が JavaScript で呼び出せないから、
Seamonkey の nsTypeAheadFind.cpp のように C++ でがんばるしかないようです。
http://lxr.mozilla.org/seamonkey/source/extensions/typeaheadfind/src/nsTypeAheadFind.cpp#127
0890デフォルトの名無しさんNGNG
インターフェイスをヘッダで定義してるのは、ネスケ時代の古いコードだね。
0891デフォルトの名無しさんNGNG
XULでファイルの圧縮はできますか?解凍はできそうなかんじですが。
0892デフォルトの名無しさんNGNG
できない。解凍はできる。
0893デフォルトの名無しさんNGNG
documentのHTMLソースを文字列として取得したいのですが、
document.getElementsByTagName("html")[0].innerHTMLの前後にHTMLタグをくっつける以外の方法はありますか?
0894デフォルトの名無しさんNGNG
XMLならnew XMLSerializer()のserializeToString()という手もありますが、
できればHTMLのまま取得したいです。
0895デフォルトの名無しさんNGNG
こんな方法もあったり。

var request = new XMLHttpRequest();
request.onload = function() { alert(request.responseText); };
request.open('GET', document.location.href);
request.send(null);

ただ、このためだけに通信を行わなくてはならないのが難ですね。
0896デフォルトの名無しさんNGNG
>>895
その方法でできました。やはり通信が必要な分タイムラグが生じてしまいますが。

続けて質問させてください。
バイナリファイルをFTPでアップロードする方法を教えてください。
アスキーならBookmarksFTPを参考にして
var sis = Components.classes['@mozilla.org/io/string-input-stream;1'].createInstance(Components.interfaces.nsIStringInputStream);
this._channel = SBservice.IO.newChannelFromURI(uri).QueryInterface(Components.interfaces.nsIUploadChannel);
try {
sis.setData("HOGE", -1);
this._channel.setUploadStream(sis, "text/xml", -1);
this._channel.asyncOpen(this, null);
this._callback("send", status);
…
という方法で簡単にできたのですが…
■ このスレッドは過去ログ倉庫に格納されています