vue对于ntko的应用经验
本来生活过的美滋滋,突然告知要用ntko写一个操作word文档的界面,看到后立马提起兴致看了下ntko的基本文档,安装ntko,研究小demo。研究完后心里立刻妈卖批了,这个ntko居然限制游览器与word版本,可把我研究苦了。chrome45后就限制了插件入口,firfox跟chrome差不多,所以只能用一些特定的进行开发。1.开发环境选择使用的是IE11,word2016(QQ游览器与...
本来生活过的美滋滋,突然告知要用ntko写一个操作word文档的界面,看到后立马提起兴致看了下ntko的基本文档,安装ntko,研究小demo。研究完后心里立刻妈卖批了,这个ntko居然限制游览器与word版本,可把我研究苦了。chrome45后就限制了插件入口,firfox跟chrome差不多,所以只能用一些特定的进行开发。
1.开发环境
选择使用的是 IE11,word2016(QQ游览器与360游览器拥有ie11的内核也可以使用,注意不要使用chrome的开发者工具)
ie11注意查看文档需要进行安全站点的检查,不然ActiveWindow获取不到,以下是设置方式图
把需要使用的ntko进行添加到信任站点才能正常使用。
2.单页面的ntko嵌入到vue项目中去
ntko嵌入到vue项目里可真是让人头秃呀,ie游览器加这个控件真的法力无边,彻底把我打磨成一个特别有耐心与好脾气的人。我们接下来说明可能出现的问题。
(1).ntko的demo使用的是script进行插入与监控,vue中的根本就识别不了script
通过$(’#id’).apend(script)进行插入,注意ntkoofficecontrol.min.js文件中的
if (browser=="IE"){
if(window.navigator.platform=="Win32"){
document.write('<!-- 用来产生编辑状态的ActiveX控件的JS脚本--> ');
document.write('<!-- 因为微软的ActiveX新机制,需要一个外部引入的js--> ');
document.write('<object id="TANGER_OCX" classid="clsid:'+classid+'"');
document.write('codebase="'+codebase+'" width="'+width+'" height="'+height+'"> ');
document.write('<param name="MakerCaption" value="'+MakerCaption+'"> ');
document.write('<param name="MakerKey" value="'+MakerKey+'"> ');
document.write('<param name="ProductCaption" value="'+ProductCaption+'"> ');
document.write('<param name="ProductKey" value="'+ProductKey+'"> ');
document.write('<param name="NoExpireKey" value="'+NoExpireKey+'"> ');
document.write('<param name="IsUseUTF8URL" value="-1"> ');
document.write('<param name="IsUseUTF8Data" value="-1"> ');
document.write('<param name="Caption" value="NTKO OFFICE文档控件示例演示 http://www.ntko.com"> ');
document.write('<SPAN STYLE="color:red">不能装载文档控件。请在检查浏览器的选项中检查浏览器的安全设置。</SPAN> ');
document.write('</object>');
}
if(window.navigator.platform=="Win64"){
document.write('<!-- 用来产生编辑状态的ActiveX控件的JS脚本--> ');
document.write('<!-- 因为微软的ActiveX新机制,需要一个外部引入的js--> ');
document.write('<object id="TANGER_OCX" classid="clsid:'+classidx64+'"');
document.write('codebase="'+codebase64+'" width="'+width+'" height="'+height+'"> ');
document.write('<param name="MakerCaption" value="'+MakerCaption+'"> ');
document.write('<param name="MakerKey" value="'+MakerKey+'"> ');
document.write('<param name="ProductCaption" value="'+ProductCaption+'"> ');
document.write('<param name="ProductKey" value="'+ProductKey+'"> ');
document.write('<param name="NoExpireKey" value="'+NoExpireKey+'"> ');
document.write('<param name="IsUseUTF8URL" value="-1"> ');
document.write('<param name="IsUseUTF8Data" value="-1"> ');
document.write('<param name="Caption" value="NTKO OFFICE文档控件示例演示 http://www.ntko.com"> ');
document.write('<SPAN STYLE="color:red">不能装载文档控件。请在检查浏览器的选项中检查浏览器的安全设置。</SPAN> ');
document.write('</object>');
}
}
else if (browser=="firefox"){
document.write('<object id="TANGER_OCX" type="application/ntko-plug" codebase="'+codebase+'" width="'+width+'" height="'+height+'" ForOnSaveToURL="ntkosavetourl" ForOndocumentopened="ntkoondocumentopened"');
document.write('ForOnpublishAshtmltourl="ntkopublishashtml"');
document.write('ForOnpublishAspdftourl="ntkopublishaspdf"');
document.write('ForOnSaveAsOtherFormatToUrl="ntkosaveasotherurl"');
document.write('_MakerCaption="'+MakerCaption+'" ');
document.write('_MakerKey="'+MakerKey+'" ');
document.write('_ProductCaption="'+ProductCaption+'" ');
document.write('_ProductKey="'+ProductKey+'" ');
document.write('_NoExpireKey="'+NoExpireKey+'" ');
document.write('clsid="{'+classid+'}" >');
document.write('<SPAN STYLE="color:red">尚未安装NTKO Web FireFox跨浏览器插件</SPAN> ');
document.write('</object> ');
}else if(browser=="chrome"){
document.write('<object id="TANGER_OCX" clsid="{'+classid+'}" ForOnSaveToURL="ntkosavetourl" ForOndocumentopened="ntkoondocumentopened"');
document.write('ForOnpublishAshtmltourl="ntkopublishashtml"');
document.write('ForOnpublishAspdftourl="ntkopublishaspdf"');
document.write('ForOnSaveAsOtherFormatToUrl="ntkosaveasotherurl"');
document.write('_IsUseUTF8URL="-1" ');
document.write('_IsUseUTF8Data="-1" ');
document.write('_MakerCaption="'+MakerCaption+'" ');
document.write('_MakerKey="'+MakerKey+'" ');
document.write('_ProductCaption="'+ProductCaption+'" ');
document.write('_NoExpireKey="'+NoExpireKey+'" ');
document.write('_ProductKey="'+ProductKey+'" ');
document.write('codebase="'+codebase+'" width="'+width+'" height="'+height+'" type="application/ntko-plug" ');
document.write('<SPAN STYLE="color:red">尚未安装NTKO Web Chrome跨浏览器插件</SPAN> ');
document.write('</object>');
}else if (Sys.opera){
alert("sorry,ntko web印章暂时不支持opera!");
}else if (Sys.safari){
alert("sorry,ntko web印章暂时不支持safari!");
}
以上代码才是真正对于word显示器的展示的控件,script只是一个引用。所以直接把ntkoofficecontrol.min.js中的代码直接写成一个函数运行就可以了,我想过在main.js使用Import+Vue.use来运行代码,发现没有效果,因为项目比较急,没有尝试,后面会进行尝试修改。
因此vue项目里面如果想把控件放入到特定的位置,需要使用以下代码(伪码)
str = '<!-- 用来产生编辑状态的ActiveX控件的JS脚本--> ' +
'<!-- 因为微软的ActiveX新机制,需要一个外部引入的js--> '+
'<object id="TANGER_OCX" classid="clsid:'+classid+'"')+
'codebase="'+codebase+'" width="'+width+'" height="'+height+'"> ' +
'<param name="MakerCaption" value="'+MakerCaption+'"> '+
'<param name="MakerKey" value="'+MakerKey+'"> ' +
'<param name="ProductCaption" value="'+ProductCaption+'"> ' +
'<param name="ProductKey" value="'+ProductKey+'"> ' +
'<param name="NoExpireKey" value="'+NoExpireKey+'"> ' +
'<param name="IsUseUTF8URL" value="-1"> ' +
'<param name="IsUseUTF8Data" value="-1"> ' +
'<param name="Caption" value="NTKO OFFICE文档控件示例演示 http://www.ntko.com"> '+
'<SPAN STYLE="color:red">不能装载文档控件。请在检查浏览器的选项中检查浏览器的安全设置。</SPAN> ' +
'</object>');
document.getElementById('container').innerHTML = str;
上述代码就是把word展示器展示到id为container的控件里面。
2.相关文档的触发事件
ntko有个很坑的点是所有事件触发都是在
<script event="OnDocActivated(isActivated)" for="TANGER_OCX">
document.getElementById('aaaaa').onD(isActivated);
</script>
在Vue项目中进行定义onD属性
export default({
mounted(){
document.getElementById('aaaaa').onD = function(){
}
}
})
这样算是完成了事件的传递工作,还有一个坑就是OnDocActivated不执行完毕好像没有ActiveWindow这个属性,所以当时利用了一个定时器延迟执行。
总结
这个ntko的项目写的人挺绝望的,IE游览器用的让人绝望,ntko每次加载还会出现页面卡顿的情况,开发时间大多数是用在等待IE游览器运行,挺考验人的耐心的。
更多推荐
所有评论(0)