本来生活过的美滋滋,突然告知要用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游览器运行,挺考验人的耐心的。

Logo

前往低代码交流专区

更多推荐