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