"browser_");これは接続出来ないって言われる。|どの時点でIEのスクリプトに横槍出来るか試してみた。はじめに実験はIE7でやってます。IE6は捨ての方向で。ソース見れば分かると思うけど。実際の実行結果は貼り付けると縦長になるので、表組みにしてみた。objectこんな感じの結果となる。見分けやすいように変更点があるところをボールドにしてみた。IE7の場合は最も早くwindowオブジェクトが生成されるのが、DownloadComplateイベントの発火時ReadyStateが1の時が成り立つ時のようだ。それ以前はdocumentオブジェクト相当がunknownとなりアクセス出来ない。evalは当分実行出来なくて、やはりDownloadCompleteイベントの発火時で、ReadyStateが3の時に実行出来る。これじゃ全然意味が無い。ReadyStateの値が状態をはかるのに参考となるって所かな。ちなみにこれが出来るとGreasemonkey的な枠組みを作ろうと思えば出来る*2し、予め任意のオブジェクトを用意しておくことも可能です。var宣言はeval相当*3が使えないとやれないので、d:id:amachangのdocumentオブジェクトを差し替えるhackを予め仕込むとかは出来ない。3のときに差し込めば、実際のDOMアクセス処理が走る前には適用出来ると思いますけど。これは画面遷移が挟まったとしても有効です。|あけましておめでとうございます。新年の初エントリはいきなりニッチなネタです><とりあえず前提はすっ飛ばす。Propertyこういう書き方が出来る。rhs);のようになる。C++の社本さん*1のフォローですが、あと、JScript独自のIDispatchExとか。関数オブジェクトは、DISPIDが0(DISPID_VALUE)で、名前が"anonymous"というメソッドを持ったCOMオブジェクトのようです。MSDN内でもまとまった記述はなく、色々と苦労して調査しましたよ。jscriptで自作COMからイベントを発生させたいと仰ってますので、IDispatch経由の遅延バインディングでJScriptのFunctionオブジェクトの呼び出しが出来るはず。2005でも出来るのかなと色々やってたら出来ました。FunctionObject.GetType.InvokeMember()で出来る。ライブラリ今の所は引数なしの関数オブジェクトを呼び出してるけど、InvokeMemberで引数リストを渡す事が出来るから、型変換さえ正しく出来れば問題なく任意の関数を呼び出せる。サンプルコード一応書いてみたコード。}jsfunc.Do_Callback();僕の環境ではプロジェクト名がVBComTestになっているのでProgIDにもprefixとして適用されてる。*1:「しゃもと」と読むらしい。|と言うネタを今度書く。EditionでもCOM連携機能が使えるようになります。EditionでもCOMオブジェクトを作る事が出来ます。Clientになりたい場合の流れは。この時点でリクエスト完了HttpConnector.OutputStreamでSoapReader.Init()するレスポンスデータはDOMで何とかするって流れになる。result.xmlみたいにする。これでとりあえずリクエストとレスポンスを低レベルで行う事は出来た。まとめどう考えてもWSDL見て良しなにやってくれるwrapperが欲しい。01:17んなこたーないですwってありましたね、そういうの。|やっとここまで辿り付けた。複合型を使う場合はどうしても低レベルAPIを使わなくてはならないので、その際リクエストデータを作る際に使うSoapSerializerの練習をしたかったのでした。SoapSerializerはInit()メソッドでIStreamを実装したオブジェクトが必要で、通常SoapConnectorオブジェクトを使うんですが、ここでは単にどういうXMLを生成しているか確認する為にADODB.Streamを使います。</SOAP-ENV:Body></SOAP-ENV:Envelope>なるほど。一部間違えてたので、ソースコード修正。|で次は文字コード変換。これは簡単で、二つストリームを用意して、変換元文字コード、変換先文字コードをそれぞれ指定してから、CopyTo()メソッドで移せばOK。"UTF-8";sjisStream.Open();sjisStream.LoadFromFile("C:\\path\\to\\sjis.txt");utf8Stream.Open();sjisStream.CopyTo(utf8Stream);sjisStream.Close();utf8Stream.SaveToFile("C:\\path\\to\\utf8.txt");utf8Stream.Close();こんな感じ。|先人が激しく既出してる訳ですが、まだ未経験なので一からやる。shift_jisなファイルをそれぞれ用意しておく。utf-8なファイルはBOMはつけない事。"Shift_JIS"s1.Open();s1.LoadFromFile("C:\\path\\to\\utf8.txt");WScript.Echo(s1.ReadText(-1));s1.Close();s2.Open();s2.LoadFromFile("C:\\path\\to\\sjis.txt");WScript.Echo(s2.ReadText(-1));s2.Close();こんな感じでOK。元の文字コードが何であれ、正しい文字コードで読み込んだ場合はWSHの場合はShift_JISで動作してるけど問題なく出力できる。"UTF-8";s1.Open();s1.LoadFromFile("C:\\path\\to\\sjis.txt");WScript.Echo(s1.ReadText(-1));s1.Close();これは何も出力されない。文字コード指定が間違えているから。|ちょっとやりたい事があったから調べてみたよ。titleからSDKをダウンロードしてインストールして下さい。準備とりあえず通信内容も見たいので、以下のようなPerlプログラムを作っておきました。どんな物かはソース見て各自把握しよう。$body_filter);$proxy->start;これでよしなに本文はリクエスト・レスポンス共にdumpしてくれます。今回試して見るサービスhttp://www.kanetaka.net/4dapi/wiki4d.dll/4dcgi/wiki.cgi?Web%83T%81%5B%83r%83X%93%FC%96%E5にあるWSH版の奴を試す。今、流行の年代らしいですwWScript.Echo(soapClient.WS_Square_root(3));事前にproxyサーバーを立ち上げておこう。</SOAP-ENV:Body></SOAP-ENV:Envelope>まとめとりあえず複合型が送受信データに含まれなければSoapClientだけで凄い簡単に出来る。次回は複合型の場合について考える予定。