jQuery插入ActiveX<;对象/>;具有不同行为的标签

jQuery插入ActiveX<;对象/>;具有不同行为的标签,jquery,activex,Jquery,Activex,一家ActiveX IE插件供应商声称,在我的测试中,ActiveX的标记被jQuery转换,而不是动态插入 plugin = $('<object ... >... </object>').get(0); $('#pluginPlaceholder').append(plugin); plugin=$(“…”).get(0); $('#pluginPlaceholder')。追加(plugin); 动态添加控件的结果是插件确实加载,一些功能可以工作,但其他部分不工作

一家ActiveX IE插件供应商声称,在我的测试中,ActiveX的
标记被jQuery转换,而不是动态插入

plugin = $('<object ... >... </object>').get(0);
$('#pluginPlaceholder').append(plugin);
plugin=$(“…”).get(0);
$('#pluginPlaceholder')。追加(plugin);
动态添加控件的结果是插件确实加载,一些功能可以工作,但其他部分不工作(没有崩溃,只是没有响应)。(尽管我相信,无反应、崩溃和其他方面的具体情况只是他们如何实现对内部遇到的错误的处理。)

为了解决这个问题,我不能在创建项时使用jQuery,甚至不能使用
$('pluginPlaceholder').html('…');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
document.getElementById('pluginPlaceholder')。innerHTML='…';
plugin=document.getElementById('obj');//$(“#obj”).get(0);似乎也有道理

jQuery会对标记做什么以任何方式影响它?

这听起来很像我们在IE中遇到的插件问题。发生的是,当jQuery构造对象标记时,它会在内存中构建标记,然后再将其放入pluginPlaceholder元素中。问题在于,在将activex控件放入DOM之前,它实际上在那里实例化了activex控件

当IE被告知将activex控件放入DOM元素中时,它会在移动activex控件之前调用该控件上的InPlaceDeactivate,然后将其放入新元素中,然后调用InPlaceActivate。许多ActiveX控件都不希望出现这种情况,有时会丢失某些内容(例如页面中的事件处理程序)


这个问题的解决方案是,在将对象标记附加到新位置之前,不要设置对象标记的CLSID或类型。

对于其他人来说,跟踪对象标记是一件非常讨厌的事情,我认为这完全解决了问题,但它只是基本上解决了问题。我仍然在我的供应商的插件中得到(更微妙的)行为改变——似乎是在每个浏览器会话中第一次加载插件,结果会出错。不能正确处理这些情况是供应商产品中的一个缺陷。但是这个答案仍然是我问题的答案。jquery的另一个常见问题是,如果他们使用它来显示/隐藏对象标记(或包含它的东西),它可能会导致类似的问题。为了获得最佳效果,永远不要使用CSS隐藏对象标记;相反,如果需要,将其保留在绝对或相对位置的div中,并在需要“消失”时将其调整为1x1。如果activeX控件设计得足够好,它就可以处理这些情况,但要做到这一点是非常困难的。是的,我已经找到了那个。每次可见性更改都会不断重新初始化。