【问题标题】:Binding handlers to events of dynamically added ActiveX controls将处理程序绑定到动态添加的 ActiveX 控件的事件
【发布时间】:2011-10-11 05:48:09
【问题描述】:

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

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

1) 似乎如果脚本标记是 HTML 的静态部分并且在页面上存在控件之前加载,那么 IE 不会触发该事件 2) 如果需要(动态)插件的多个实例,则不能对对象 ID 进行硬编码

但是当我添加以下代码时,我会在事件触发之前立即得到“'param1' is undefined”(我几乎可以肯定它不是响应事件触发)。

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

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

是否有另一种方法可以动态加载插件,并附加到它的事件而不对处理程序进行硬编码?

=======

另外,从各种帖子看来,即使 $.bind() 不适用于 ActiveX 和 XPI 插件,attachEvent() 或 addEventListener() 应该可以工作。是这样吗?对于动态添加的插件,我无法确认。

【问题讨论】:

    标签: jquery event-handling activex


    【解决方案1】:

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

    【讨论】:

    • 谢谢,但我尝试了$('&lt;script ...').appendTo('HEAD');$('&lt;script ...').appendTo($('HEAD'));,但行为没有改变。我说得对吗?
    • 我还在努力。 'for' 必须/应该在引号中作为关键字。但更大的问题是 .html() 似乎不适用于脚本标签。我收到“对方法或属性访问的意外调用。”
    • 另外,如果我取出设置脚本代码的部分 .html(...),它不会产生任何错误。我仍然希望在 IE Developer Tools Html 选项卡中看到带有属性的空脚本标记(尤其是在该工具中的“刷新”之后)已添加到 HEAD 标记,但我没有看到。即使我解决了 .html() 问题,我认为这个问题仍然存在。您的示例代码是否在您的环境中工作?
    • 感谢您在这里所做的最初努力。对此有什么想法吗?
    • 你能做一个小提琴来重现你的错误吗?我会尝试一下,看看我能想出什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多