mshtml and friends

Reece Dunn msclrhd at googlemail.com
Tue Sep 28 14:37:05 CDT 2010


On 28 September 2010 15:14, Jacek Caban <jacek at codeweavers.com> wrote:
>  Hi Reece,
>
> On 9/28/10 2:59 PM, Reece Dunn wrote:
>>
>> Hi,
>>
>> The current state of support for the Internet Explorer components in
>> Wine is good, but there are applications that don't work with it
>> because they are dependent on more of the functionality provided by
>> Internet Explorer via the WebBrowser control.
>>
>> I have had a scan through some of the mshtml code, and see various
>> things not handled -- such as the onload handler of the HTMLBody
>> element -- but I am not very familiar with this area.
>
> onload is handled properly on body element, it's just getter/setter that is
> a stub. It's a trivial one line patch that implements them. The fact that
> they are stubs means that I've never seen them used in apps I was working
> on.
>
> Most MSHTML APIs are trivial Gecko API wrappers. They are easy to implement,
> the only problem is that there are really many functions to implement. I
> implement only ones that are needed for real apps. The hard part of MSHTML
> is in the few APIs that are not just wrappers and not directly exposed parts
> like loading the document.
>
>> I am interested in helping out to improve this area -- my aim is to
>> not require the `winetricks ie6` command to get some of these
>> applications (specifically the Big Fish Games client) to a usable
>> state.
>>
>> Therefore, I am wondering if anyone knows where the best place is to
>> start looking (e.g. known areas of missing functionality) or how to
>> debug applications (and interpret WINEDEBUG output) to identify where
>> the issues are.
>
> There is no single answer. You want mshtml debug channel for most cases. If
> the problem is with embedding document in an app, then shdocvw is also
> useful. If you have scripts that don't work (and we use jscript for them),
> then jscript debug channel is the answer. If you have a problem with loading
> document, I'd add urlmon,wininet channel.

After some digging around, there appears to be some issues with the
jscript.dll implementation:

   $ trace:jscript:DispatchEx_QueryInterface
(0x1dad2d0)->(IID_IDispatchJS 0x33d5e8)
   $ trace:jscript:DispatchEx_AddRef (0x1dad2d0) ref=7
   $ trace:jscript:prop_get L"SWFObject" ret {VT_EMPTY}
   $ trace:jscript:DispatchEx_Release (0x1dad2d0) ref=6
   $ trace:jscript:DispatchEx_Release (0x1dad2d0) ref=5
   $ fixme:jscript:new_expression_eval throw TypeError
The new_expression_eval fixme is because V_VT(&constr) == VT_EMPTY.

Now SWFObject is defined in a <script> file, but there are various
script files. For example, given a html file containing:

    <script src="a.js"></script>
    <script src="b.js"></script>
with a.js:

    function SWFObject() { this.x = 5; }

and b.js:

    var swf = new SWFObject(); // appears to be erroring here
    alert(swf.x);
Is this supported currently in Wine, or am I going down the wrong track?

- Reece



More information about the wine-devel mailing list