Я пытаюсь перенести расширение с Firefox на IE.Весь код расширения написан на JS (без компонентов C ++), поэтому я решил, что буду использовать этот код повторно и только буду беспокоиться о специфических частях Mozilla (что, без сомнения, тоже пытка, но я думаю, что это менее болезненно, чем переписывать его).с нуля).
Расширение FF обернуто в объект JS, который инициализируется во время события load.Затем «бизнес» код расширения запускается по событию «DOMContentLoaded».
Мой первоначальный план состоял в том, чтобы создать WSC (Window Scripting Component) и прослушивать там событие onLoad и в основном делать то же самое, чтооригинальный код делает.Однако я обнаружил, что в моем компоненте сценариев JavaScript нет неявного объекта глобального окна,
Мой план B заключался в том, чтобы прослушать событие "onBeforeNavigate2" в моем коде BHO C ++ и вызвать код JS WSC, который обрабатывает расширениеинициализация объекта там.Поэтому я решил передать объект окна браузера в качестве параметра «окна» JS-функции onBeforeNavigate и переписать исходный код расширения для использования явной переменной «окна» вместо того, чтобы полагаться на неявный глобальный объект.
Однако, когда я обрабатываю событие «OnDocumentComplete» (еще раз прослушивая его в BHO и передавая объект окна браузера в качестве аргумента функции JS в WSC), я получаю «Не могу«Выполнить код из освобожденного сценария» ошибка.
Код WSC выглядит следующим образом:
<?xml version="1.0"?>
<component>
<registration
...
>
</registration>
<public>
<method name="OnBeforeNavigate">
<parameter name="win" />
</method>
<method name="OnDocumentComplete">
<parameter name="win" />
</method>
</public>
<script src="sharedjs/foo.js" />
<script language="JScript">
<![CDATA[
var window;
function OnBeforeNavigate(win)
{
window = win.document.parentWindow.top;
window.myNS.extObject = initExtensionObject(...);
}
function OnDocumentComplete(win)
{
window = win.document.parentWindow.top;
var obj = window.myNS.extObject;
obj.doTheBusinessStuff();
}
]]>
</script>
</component>
Я предполагаю, что это потому, что WSC выгружается после возврата из функции обработчика.Однако в объекте окна браузера есть ссылка на объект расширения JS, поэтому я ожидаю, что браузер сохранит код.
Итак, в чем здесь моя ошибка, пожалуйста?
Приветствия, Том
PS: WSC означает Windows Scripting Component