Привязка обработчиков к событиям динамически добавленных элементов управления ActiveX - PullRequest
0 голосов
/ 22 июля 2011

Элемент управления ActiveX загружается в зависимости от браузера и других факторов.

Для обработки событий из элемента управления ActiveX простой jquery .bind('Event', ...) не будет работать.Вместо этого мне кажется, что мой единственный выбор - использовать привязку в стиле <script ... for='myPlugin' event='Event'></script>.

1) Кажется, что если тег script статически является частью HTML и загружается до того, как элемент управления существует на странице,тогда IE не будет запускать событие 2) Жесткое кодирование идентификаторов объектов недопустимо, если необходимо (динамически) несколько экземпляров плагина

Но когда я добавляю следующий код, я получаю "'param1'is undefined' немедленно, до того, как событие должно сработать (я почти уверен, что это не в ответ на срабатывание события).

$('HEAD').append($('<script language="javascript" ' +
    'type="text/javascript" for="myPlugin" event="Event(param1)">' + 
    '$('#myPlugin').triggerHandler("jQueryBoundEvent", [ param1 ]);' +
'<' + '/script>'));

Из Интернета я понял, что jQuery мешает работедобавление тегов сценария и довольно eval () с ними.Это объясняет несвязанный param1 и немедленное выполнение скрипта.Атрибуты сценария for и события теряются во время eval ().

Есть ли другой способ динамической загрузки плагина и присоединения к его событиям без жесткого кодирования обработчиков?

=======

В качестве альтернативы из различных сообщений видно, что хотя $ .bind () не работает для плагинов ActiveX и XPI, но метод attachEvent () или addEventListener () должен работать.Это тот случай?Я не смог подтвердить это для динамически добавленного плагина.

1 Ответ

1 голос
/ 22 июля 2011

Попробуйте appendTo('head') вместо $('head').append(...

Я знаю, что JQuery говорит, что они в основном идентичны, за исключением порядка, но IE не согласен и предпочитает appendTo() при внедрении скриптов в голову.

Попробуйте это:

var plugin_html = '$("#myPlugin").triggerHandler("jQueryBoundEvent", [ param1 ]);';
$('<script />').attr(
{
    type: 'text/javascript',
    for: 'myPlugin',
    event: 'Event(param1)'
}).html(plugin_html).appendTo($('head'));
...