2008-12-04 22 views
33

Estoy intentando generar eventos JavaScript sintéticos en una extensión de Internet Explorer, y tengo problemas para mantener la propiedad fromElement. Aquí hay un extracto de mi código:No se puede establecer IHTMLEventObj2 :: fromElement

MsHtml.IHTMLDocument4 doc4 = ... // the document object 
Object o = null; 
MsHtml.IHTMLEventObj2 eObj = 
    (MsHtml.IHTMLEventObj2)doc4.CreateEventObject(ref o); 

// string that specifies the from element, e.g. "document.getElementById('id1')": 
string locator = ... 
object from = doc4.Script.GetType().InvokeMember("eval", 
               BindingFlags.InvokeMethod, 
               null, 
               doc4.Script, 
               new object[] { locator }); 

// from now holds a ref to an object that implements the IHTMLElement interface 
eObj.fromElement = from; 
IHTMLElement el = eObj.fromElement; 
// el == null 

¿Qué estoy haciendo mal aquí? eObj.fromElement debería ser igual a from, pero no parece estar configurándose.

+1

¿Se puede configurar con éxito en JavaScript? De ser así, podría ser más simple simplemente evaluar un fragmento de JavaScript que devuelve el IHTMLEventObj2 con el elemento fromElement ya configurado. p.ej. 'var o = document.createEventObject(); o.fromElement = document.getElementByID (locator); return o; ' – Ben

+6

No entiendo todo pero ... la palabra' from' es una palabra reservada en C#, ¿no te ha causado un error? – Elwi

+0

¿Está seguro de que no es nulo cuando lo hace eObj.fromElement = from? Puede que ya hayas comprobado esto, pero dado que no está marcado en el código que le diste, no está de más comprobarlo. Puede ser que eObj.fromElement sea nulo porque inadvertidamente * lo * ha establecido como nulo. – Chris

Respuesta

1

Simplemente un tiro salvaje en la oscuridad, pero ¿podría ser porque pasaste un objeto "nulo" al método CreateEventObject? ¿Qué hay de si cambia esto:

Object o = null; 

A esto:

Object o = new Object(); 

En la línea 3 de su ejemplo?

Cuestiones relacionadas