Re: Вставка скрипта в BHO для IE
От: okman Беларусь https://searchinform.ru/
Дата: 28.04.11 18:14
Оценка: 2 (1)
Здравствуйте, Vicul, Вы писали:

V>Всем привет,


V>написал аддон для IE, который должен вставлять скрипт в страницу, загружаемую на IE.

V>Вообщем я могу вставить любой текст в страницу, но не могу заставить работать скрипт,
V>IE просто его игнорирует.
V>Вот часть кодов:

V>const BSTR g_script =L"<script type=\"text/javascript\" DEFER> alert('foobar');</SCRIPT>";


Первое, что бросается в глаза — некорректное использование BSTR.
Это не то же самое, что указатель на wchar_t, потому что BSTR хранит длину строки и
вообще с этим типом данных нужно работать через Sys(Re)AllocString/SysFreeString, либо
с помощью ATL-овских оберток CComBSTR.
Лично сталкивался с некоторыми непонятными проблемами, которые сразу же исчезали после
приведения подобных фрагментов с BSTR к правильному виду. Что и Вам настоятельно
советую сделать.

V>void STDMETHODCALLTYPE CBHOinject::OnDocumentComplete(IDispatch *pDisp, VARIANT *URL)

V>{
V> if (m_pMainDisp != pDisp)
V> return;
V> IHTMLElement* pEl = NULL;
V> HRESULT hr;
V>...........
V> hr = pEl->insertAdjacentHTML(L"afterBegin", g_script);
V> if (!SUCCEEDED(hr))
V> {.....// error}
V>.......
V>}

Хм, интересно было бы посмотреть весь код.
На самом деле внедрить элемент <script> на страницу — не такая уж и сложная задача, и
делать это можно по-разному.

Дам подсказку — через указатель на документ нужно создать новый элемент
(IHTMLDocument2::createElement), затем заполнить его атрибуты (IHTMLElement::setAttribute)
соответствующими значениями (type="text/javascript", src="URL" defer="false"), а
затем "прикрепить" этот новый созданный элемент к уже существующему, например, к <body>.
Как добраться до <body> — думаю, задача посильная, см. IHTMLDocument2::get_body и другие.

Проверено на IE 6-8, Win32/x64.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.