一个ActiveX IE插件供应商声称,在我的测试中似乎肯定是这样的情况,即ActiveX的<object />
标签被jQuery变得有趣,而不是动态插入它。
plugin = $('<object ... >... </object>').get(0);
$('#pluginPlaceholder').append(plugin);
动态添加控件的结果是插件加载,一些功能正常工作,但其他部分不起作用(没有崩溃,没有响应)。 (虽然我相信无反应与崩溃相比其他东西的细节只是他们如何实现处理内部遇到的错误。)
要解决这个问题,我不能在创建项目时使用jQuery,甚至不能$('#pluginPlaceholder').html('<object id='obj' ... >... </object>'); plugin = document.getElementById('obj');
但如果jQuery没有触及它,它可以正常工作:
document.getElementById('pluginPlaceholder').innerHTML = '<object id='obj' ... >... </object>';
plugin = document.getElementById('obj'); // $('#obj').get(0); seems to be valid too
jQuery可能会对标记做什么以任何方式影响它?
答案 0 :(得分:2)
这听起来与我们在IE中使用FireBreath插件遇到的问题非常相似。发生的事情是,当jquery构造object标签时,它会在将标签放入pluginPlaceholder元素之前在内存中构建标记。这个问题是它在将它放入DOM之前实际实例化了activex控件。
当告诉IE将activex控件放入DOM元素时,它会在移动它之前在ActiveX控件上调用InPlaceDeactivate,然后将其放在新元素中,然后调用InPlaceActivate。许多ActiveX控件都没有预料到这一点,并且有时会发生某些事情(比如页面中的事件处理程序)。
问题的解决方案是在将对象标记添加到新位置之后才设置对象标记的CLSID或TYPE。