INFO: Aceder ao modelo de objectos a partir de um controlo ActiveX

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática… erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 172763
Este artigo foi arquivado. Este artigo é oferecido "tal como está" e deixará de ser actualizado.
Sumário
Quando escrever um controlo ActiveX para a Internet, muitas vezes, poderá ser necessário aceder o modelo de objectos da página HTML. O modelo de objecto permite o acesso a vários elementos numa página HTML.

Este artigo aborda a aceder ao modelo de objectos do Visual C++ e do Visual Basic e abrange o Internet Explorer (IE) 3.x e 4.0.
Mais Informação

O MODELO DE OBJECTO

Documentação para o modelo de objecto pode ser encontrada em ActiveX Software Development Kit (SDK) e o SDK do cliente de Internet para o Internet Explorer 3.x e 4.0, respectivamente. O modelo de objectos está documentado, da seguinte forma:
   window      - location      - frames      - ...      - document         - links         - forms            - elements				
o objecto da janela está no nível superior desta hierarquia. A janela tem uma propriedade de documento, que por sua vez tem seu próprio conjunto de propriedades. Consulte o SDK adequado para mais detalhes.

POR QUE RAZÃO DEVE UM CONTROLO NECESSITAR DE ACEDER O MODELO DE OBJECTOS?

Um controlo pode aceder (e em alguns casos modificar) informações sobre a página que está incorporada no. Para tal, o controlo tem de aceder o modelo de objecto. Por exemplo, um controlo pode enumerar todos os elementos numa página. No caso de HTML dinâmico, o controlo pode aceder a quase qualquer elemento HTML na página.

ACEDER AO MODELO DE OBJECTO

O modelo de objecto é implementado utilizando automatização e interfaces COM. Depois de ter acesso a nível superior do modelo de objectos no controlo, em seguida, pode pesquisar para baixo o modelo de objecto utilizando automatização ou COM interfaces. Este artigo explica os dois passos:
  1. Obter o nível superior de modelo de objecto.
  2. Pormenorizar para o modelo de objecto.

OBTER O NÍVEL SUPERIOR DE MODELO DE OBJECTO (VISUAL C++)

Utilizando IWebBrowserApp (para o Internet Explorer 3.x e 4.x)

IWebBrowserApp é uma interface é exposta pelo controlo do Web Browser. Tem uma propriedade do documento (ou get_document método) se utilizar vtable interface que permite o acesso ao objecto de automatização do documento activo. Se o documento for um documento HTML, o objecto de automatização tem uma propriedade de script que dá ao objecto janela do modelo de objecto de script. Por isso, para um controlo alcançar o modelo de objectos, deve ser feito o seguinte:

  • Obter IWebBrowserApp da respectiva página HTML que contém.
  • Obter propriedade de documento de IWebBrowserApp.
  • Obter a propriedade de script do documento.
Isto vai colocar, no nível superior (janela objecto) no modelo de objecto. Utilize a automatização para pormenorizar mais.

Como obter o IWebBrowserApp

Obter o IWebBrowserApp é um processo composto por dois passos:
  1. Utilize o ponteiro IOleClientSite obter IServiceProvider. Num ATL controlo, é possível obter este ponteiro acedendo o membro m_spClientSite do controlo. Num controlo MFC, é possível obter este ponteiro chamando COleControl::GetClientSite(). O controlo tem acesso à interface IOleClientSite do respectivo contentor. Pode utilizar esse ponteiro para QI para IServiceProvider:
    pClientSite->QueryInterface(IID_IServiceProvider,                          (void **)&pISP);						
  2. Utilize o IServiceProvider para obter IWebBrowserApp. Utilizar o IServiceProvider, um QueryService pode ser feito para obter o IWebBrowserApp:
          pISP->QueryService(SID_SWebBrowserApp, IID_IWebBrowserApp,                        (void **)&pIWebBrowserApp));						
Além disso, se programação para o Internet Explorer 4 ou posterior, pode obter um apontador para a interface IWebBrowser2 do contentor com este código:
   pISP->QueryService(IID_IWebBrowserApp, IID_IWebBrowser2,     (void **)&pIWebBrowser2));				
QueryService é diferente de QueryInterface em que não tem a seguir a regra de identidade de COM. Deste modo, se o próprio objecto não implementa IWebBrowserApp,-pode delegar o objecto contentor e QueryService-lo para um IWebBrowserApp.

Obter a propriedade de documento de IWebBrowserApp

IWebBrowserApp é uma interface dupla. Tem uma propriedade do documento e também um método get_Document. Um pode ser utilizado para obter IDispatch do documento activo. Quando tiver IDispatch, em seguida, é possível obter a propriedade de script.

Obter a propriedade de script do documento

Utilizar IDispatch obtido acima, obtenha a propriedade de script utilizando a automatização. Isso dará o nível superior no modelo de objecto scripts ou o objecto da janela.

OBTER O NÍVEL SUPERIOR DE MODELO DE OBJECTO (VISUAL C++)

(Apenas Internet Explorer 4.0)

Internet Explorer 4.0 permite aceder ao modelo de objectos muito mais fácil. Este é um processo de um só passo:
  1. Obter o IHTMLDocument2 do IClientSite.

Obter IHTMLDocument2 de IOleClientSite

Cada controlo tem acesso a IClientSite do respectivo recipiente. Ar QI para IHTMLDocument2 do site do cliente deve conceder o modelo de objecto scripts.
   IOleContainer* pContainer = NULL;   IHTMLDocument2* pDoc = NULL;   pClientSite->GetContainer( &pContainer );   if ( pContainer != NULL )      pContainer->QueryInterface( &IID_IHTMLDocument2, &pDoc );				
Verifique o valor devolvido da chamada acima. Se o controlo não é incorporado uma página HTML ou se o contentor não for Internet Explorer 4.0, em seguida, a acima chamada falhará.

Obter IHTMLDocument2 fornece o objecto de documento no modelo de objecto de script. Em seguida, em interfaces de automatização ou interfaces vtable podem ser utilizadas para pesquisar para baixo o modelo de objecto.

OBTER O NÍVEL SUPERIOR DE MODELO DE OBJECTO (BÁSICO VISUAL)

A propriedade principal do UserControl pode ser utilizada para aceder o objecto de automatização. A partir da documentação do Visual Basic para a propriedade principal, o Internet Explorer devolve um objecto cuja propriedade script devolve o objecto IOmWindow.

O exemplo indicado na documentação do Visual Basic é o seguinte:
Parent.Script.get_document.bgColor = "Blue"				
propriedade Parent O obtém ao objecto de automatização. Em seguida, a propriedade de script dá-no janela objecto do modelo de objecto de script. Em seguida, os métodos e propriedades diferentes podem ser acedidos tal como qualquer outro objecto de automatização.

A linha acima do código deve ler da seguinte forma:
Parent.Script.document.bgColor = "Blue"				
mesmo que utilizar get_document estiver correcto no Internet Explorer 3.x, não vai funcionar no Internet Explorer 4.0. O método correcto é utilizar a propriedade de documento. Isto funciona tanto no Internet Explorer 3.x e 4.0.

PORMENORIZAR O MODELO DE OBJECTO

Pormenorizar o modelo de objecto é tão fácil como ligar as propriedades e métodos utilizando a automatização. Para Internet Explorer 3.x, utilize apenas a automatização. Para o Internet Explorer 4.0, podem ser utilizadas vtable interfaces. Para mais informações consulte o exemplo driller no Internet Client SDK.
IE VB

Aviso: Este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 172763 - Última Revisão: 12/04/2015 17:39:37 - Revisão: 1.0

Microsoft Internet Explorer 3.01, Microsoft Internet Explorer 3.02, Microsoft Internet Explorer 4.0 128-Bit Edition, Microsoft Internet Client Software Development Kit 4.01

  • kbnosurvey kbarchive kbmt kbfaq kbinfo KB172763 KbMtpt
Comentários