2008-11-05 2 views
3

Можно ли развернуть сессию пользователей (или сделать что-то подобное) в плагине Internet Explorer?Прокрутите или скопируйте сеанс браузера пользователей в IE

Я хочу обработать страницу, на которой пользователь включен, когда нажимает кнопку на панели инструментов. Чтобы не прерывать просмотр пользователей, я бы хотел «скопировать» все, чтобы я мог анализировать и обрабатывать страницу в фоновом режиме. Обработка может включать такие вещи, как загрузка содержимого ссылок на результат в поиске Google, если на это была нажата кнопка.

Так что, в основном я хочу подражать «Ctrl+N», но скрыть окно от пользователя, чтобы они не прерывались.

Как вы можете видеть, если вы заполните и отправьте форму на http://www.snee.com/xml/crud/posttest.html и нажмите «Ctrl+N», все, что было опубликовано, по-прежнему будет отображаться в новом окне, но оно не будет публиковать данные дважды.

Я думал как-то скопировать IWebBrowser2, но:

  • Я не уверен, если это возможно (я не смог найти какую-либо информацию о MSDN)
  • я не делаю знайте, копирует ли он сеансы.

Создание нового экземпляра IWebBrowser2 и просто перейти на текущий URL не является допустимым решением, как POST -variables, конечно, не увлекайтесь более.

ответ

0

Интересные мысли. Не могли бы вы скопировать DOM holus-bolus, а затем заменить DOM нового окна на копию. Это просто догадка. Я так же в темноте, как ты сейчас.

1

BHO или плагин будет работать. Есть так много вариантов, чтобы получить источник, это любопытно. выберите свою игру. Посмотрите на IDocHostUIHandler, чтобы изменить поведение. IHTMLElementCollection для анализа страницы в браузере. Простейшая вещь, о которой я могу думать на данный момент, - это ...

Сохраните текущее содержимое в потоке. так же, как 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(); 
} 

Вы поставляете браузер и stream.HTH

-

Майкл

0

Я думаю, что это невозможно сделать, потому что вы должны думать о так много деталей, то всегда будет ломаться. Просто упомянем два:

  • Вам необходимо позаботиться о встроенных веб-браузерах (фреймах, IFRAME). Я думаю, что копирование главной страницы просто скопирует их URL-адреса, чтобы их контент был перезагружен при восстановлении сериализованной главной страницы где-то, таким образом, содержимое вашей страницы изменится. Поэтому вам нужно будет спуститься до уровня кадра.
  • Вам нужно будет позаботиться о скриптах, которые за вашей спиной попробуйте подключиться к некоторому серверу, чтобы отправить данные, которые уже были отправлены на страницу, которую вы раздвоили. Таким образом, вы можете изменить логику страницы.

Так что обработка в реальном времени - единственное истинное решение для захвата состояния, когда пользователи видят его; если это то, чего вы хотите достичь. Если вам не нужны такие детали, это может быть проще сделать.