2008-11-05 9 views
3

Est-il possible de débocter une session d'utilisateurs (ou de faire quelque chose de similaire) dans un plugin Internet Explorer?Interdire ou copier une session de navigateur d'utilisateurs dans IE

Je souhaite traiter la page sur laquelle l'utilisateur se trouve lorsqu'il clique sur un bouton dans la barre d'outils. Pour éviter d'interrompre la navigation des utilisateurs, je voudrais "tout copier" afin que je puisse analyser et traiter la page en arrière-plan. Le traitement peut impliquer des choses telles que le chargement du contenu des liens de résultats sur une recherche Google, si c'est là que le bouton a été cliqué. Donc, ce que je veux essentiellement, c'est imiter "Ctrl+N" mais cacher la fenêtre de l'utilisateur, afin qu'ils ne soient pas interrompus. Comme vous pouvez le voir, si vous remplissez et soumettez le formulaire sur http://www.snee.com/xml/crud/posttest.html et que vous appuyez sur "Ctrl+N", tout ce qui est posté apparaîtra toujours dans la nouvelle fenêtre, mais il ne sera pas publié deux fois.

Je pensais en quelque sorte la copie du IWebBrowser2, mais:

  • Je ne sais pas si cela est possible (je ne l'ai pas été en mesure de trouver des informations sur MSDN)
  • Je ne Sachez s'il copie également les sessions.

Création d'une nouvelle instance de la IWebBrowser2 et naviguer simplement à l'URL actuelle n'est pas une solution valide POST -variables bien sûr ne s'emballent pas trop.

Répondre

0

Une pensée intéressante. Pourriez-vous copier le DOM holus-bolus et remplacer le DOM d'une nouvelle fenêtre avec la copie. C'est juste une supposition. Je suis autant dans l'obscurité que vous à ce stade.

1

Un BHO ou un plugin fonctionnerait. Il y a tellement d'options pour obtenir la source, c'est un peu. choisissez votre équilibre. Recherchez IDocHostUIHandler pour modifier le comportement. IHTMLElementCollection pour analyser la page dans le navigateur. La chose la plus simple que je peux penser en ce moment est ....

Enregistrer le contenu actuel dans un flux. Identique à get/view source.

 
// #include 
HRESULT SaveDocumenttoStream(IWebBrowser* pWebBrowser, 
          IStream* pStream) 
{ 
HRESULT hr; 
IDispatch* pHtmlDoc = NULL; 
IPersistStreamInit* pPersistStreamInit = NULL; 
hr = pWebBrowser->get_Document(&pHtmlDoc); 
if (SUCCEEDED(hr) && pHtmlDoc) 
{ 
    // Query for IPersistStreamInit. 
    hr = pHtmlDoc->QueryInterface(IID_IPersistStreamInit, 
           (void**)&pPersistStreamInit); 
    if (SUCCEEDED(hr)) 
    { 
    hr = pPersistStreamIni->Save(, True); 
    pPersistStreamInit->Release(); 
    } 
    pHtmlDoc->Release(); 
} 

vous fournir le navigateur et stream.HTH

-

Michael

0

Je pense qu'il est impossible de le faire parce que vous devez penser à tant de détails, quelque chose va toujours casser. Juste pour mentionner deux:

  • Vous devez prendre soin des navigateurs Web intégrés (cadres, IFRAME). Je pense que la copie de la page principale ne ferait que copier leurs URL afin que leur contenu soit rechargé lorsque vous restaurez la page principale sérialisée quelque part, ainsi le contenu de votre page change. Donc, vous devrez descendre au niveau du cadre.
  • Vous devriez faire attention aux scripts qui derrière votre dos essaient de se connecter à un serveur pour envoyer des données qui ont déjà été envoyées par la page que vous avez bifurqué. Vous pourriez donc changer la logique de la page.

Donc le traitement en direct est la seule vraie solution pour capturer l'état tel que les utilisateurs le voient; si c'est ce que vous voulez accomplir. Si vous n'avez pas besoin de beaucoup de détails, cela pourrait être plus facile à faire.

Questions connexes