Cómo obtener un puntero IHTMLElement a la etiqueta
-
29-09-2019 - |
Pregunta
Tengo un control ActiveX generado por el marco FireBreath (http://firebreath.org). Necesito obtener una referencia a la etiqueta
Si estuviera usando NPAPI, me gustaría utilizar la constante NPNVPluginElementNPObject con NPN_GetValue.
así que para asegurarse de que estoy siendo claro, decir que tengo lo siguiente en la página:
Quiero obtener una referencia al complemento como lo haría si usara document.getElementById ( "testPlugin"), excepto desde dentro del código C ++ del control ActiveX que se inserta para ese tipo MIME.
Tenga en cuenta que pasando el id en un no es una buena opción para mí, pero si hay una manera de obtener el ID desde dentro del control ActiveX que pueden trabajar.
editar:. Estoy pensando en utilizar getElementsByTagName y tratando de encontrar a través del DOM, pero sería difícil decir la diferencia entre dos instancias del mismo plug-in
Solución
Gracias a FireBreath colaborador jtojanen desde Finlandia, que finalmente tienen una solución.
Lo primero es que el objeto COM debe se registrará como "Apartamento", no "individual" (en el Registro). De lo contrario, esto no funcionará; parece ser un error en COM.
A continuación, en cualquier lugar después SetClientSite se llama, puede hacer lo siguiente:
CComQIPtr<IOleControlSite> site(m_spClientSite);
CComPtr<IDispatch> dispatch;
site->GetExtendedControl(&dispatch);
CComQIPtr<IHTMLElement2> htmlElement = dispatch;
Espero que esto ahorra a alguien algún tiempo; que me ha llevado casi 2 años para encontrar a alguien que pudiera responder a esta para mí.
El objeto de HTMLElement será la etiqueta
Otros consejos
En C #:
public int SetSite(object site)
{
if (site != null)
{
var oleControl = (IOleControlSite)site;
object oHtmlElement;
oleControl.GetExtendedControl(out oHtmlElement);
var htmlElement = (IHTMLElement2)oHtmlElement;
...
}
}