2011年10月28日

[ruby-list:48502] Re: IE9/Windows7(64bit)だとformをsubmitできない

artonです。

パラメータを確認しましたが、0個で変わっていませんでした。
というわけで、パラメータ数が原因では無いようです。
で、irbで呼び出してみると不思議なことに、以下になります。

irb(main):056:0> x = ie.document.getElementById('srchbtn')
=> #<WIN32OLE:0x00000002f9cdb8>

irb(main):057:0> x.click
=> #<WIN32OLE:0x00000003044b58>

clickはvoidだと思うのですが、WIN32OLEのオブジェクトが返っています。

irb(main):060:0> a.ole_methods
=> [#<WIN32OLE_METHOD:GetTypeInfoCount>, #<WIN32OLE_METHOD:GetTypeInfo>, #<WIN32
OLE_METHOD:GetIDsOfNames>, #<WIN32OLE_METHOD:Invoke>]

が、持っているのはIDispatch*のみです。

irb(main):062:0> x.__send__(:click)
=> #<WIN32OLE:0x0000000304f5a8>
irb(main):063:0> x.click()
=> #<WIN32OLE:0x00000002f89fb0>
irb(main):064:0> x.click('hello')
=> nil

'hello'を与えても、特に問題なくsubmitされます。おそらくDOMオブジェクトは
JavaScriptのオブジェクトとしての振る舞い(引数はあまり気にしない)として
実装されているような。

上記から、
clickというプロパティがあるのだと思います。つまり、JavaScriptオブジェク
トであれば、
var elem = document.getElementById('subtn');
elem.click = function() { .... } // セッタ
alert(elem.click); // ゲッタ function() { ... } が表示
elem.click(); // メソッド呼び出し
となるわけで、IE9からメソッド名を与えるとプロパティとして振る舞うのでは
ないでしょうか。
で、Win32OLEは、とりあえず無引数の呼び出しでは最初にプロパティゲッタをチェッ
クするため、それにレスポンスがあってメソッド呼び出しに進まないということ
だと思います。
(解決しようがないのは、Rubyには、()の有無の区別とか別にないことですね)

--
arton <artonx@xxxxx>

投稿者 xml-rpc : 2011年10月28日 23:04
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/107041
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。