Здравствуйте, 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 и другие.