On 28 September 2010 15:14, Jacek Caban jacek@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