[#48450] 1.8.7と1.9.2の挙動の違いについて — "Jun'ya Shimoda" <jun-shimo@...>

下田です。

13 messages 2011/10/09

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

From: arton <artonx@...>
Date: 2011-10-28 14:04:05 UTC
List: ruby-list #48502
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@yahoo.co.jp>


In This Thread

Prev Next