将处理程序绑定到动态添加的ActiveX控件的事件



ActiveX控件正在根据浏览器和其他因素有条件地加载。

为了从ActiveX控件处理事件,一个简单的jquery .bind('Event', ...)将无法工作。相反,在我看来,我唯一的选择是使用<script ... for='myPlugin' event='Event'></script>风格的绑定。

1)如果脚本标签是HTML的静态部分,并且在控件存在于页面之前加载,那么IE将不会触发该事件2)硬编码对象id是不可接受的,如果需要(动态)多个插件实例

但是当我添加以下代码时,我立即得到"'param1'是未定义的",在事件应该触发之前(我几乎可以肯定它不是响应事件触发)。

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

从网上,我收集到jQuery干扰添加脚本标签,而不是eval()他们。这就解释了未绑定的param1和脚本的立即执行。脚本的for和event属性在eval()期间丢失。

是否有另一种方法来加载插件动态,并附加到它的事件没有硬编码的处理程序?

=======

或者,它似乎从各种帖子,即使$.bind()不工作的ActiveX和XPI插件,attachEvent()或addEventListener()应该工作。是这样吗?我还没有能够确认动态添加的插件

尝试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'));

相关内容

  • 没有找到相关文章

最新更新