• Chrome谷歌浏览器加载ActiveX控件之allWebDesktop控件介绍


     背景

            allWebDesktop控件是一款方便用户在线打开各类文档的OA办公控件。它设计比较轻巧,充分利用计算机程序资源打开文档,并将程序窗口嵌入到allWebDesktop控件区域内,从而实现浏览器内打开各类文档效果。

            allWebPlugin中间件是一款为用户提供安全、可靠、便捷的浏览器插件服务的中间件产品致力于将浏览器插件重新应用到所有浏览器。它不仅可以实现ActiveX控件在现代浏览器上使用,而且集成也非常方便。

    alWebPlugin中间件核心优势

    1、自创定位算法,实现插件与页面布局无缝衔接,极致用户体验。
    2、自创插件接口调用方法,保持原汁原味的接口调用及事件响应方式,轻松实现OA系统升级改造。
    3、支持同一页面或不同页面同时加载多个插件,适应各种复杂应用场景。
    4、自主创新、安全可控,不受浏览器插件技术限制,支持更多浏览器(谷歌、火狐、Edge、360浏览器等)。
    5、创新沙箱机制,隔离插件与浏览器运行环境,增强插件与浏览器稳定性和安全性。
    6、攻克诸多技术难点,实现插件不修改、不注册也能使用,极大的降低插件开发量和维护量。

    准备工作

    1、下载allWebPlugin中间件产品,具体如下:

    链接:百度网盘 请输入提取码 
    提取码:z3q0 

    如下图所示,下载allWebPlugin_x86_v2.0.0.24_alpha_20241028.zip安装包。

    软件包下载

    运行效果

            运行效果如下图所示:

    allWebDesktop控件打开Word文档
    allWebDesktop控件打开PDF文档

     

    allWebPDesktop控件打开JT文档

    集成代码 

     allWebPlugin中间件集成步骤

    第一步:导入js相关文件

    导入jquery.min.js,allWebPlugin.Common.js,allWebPlugin.UI.js文件。

    1. <script type="text/javascript" src="js/jquery.min.js">script>
    2. <script type="text/javascript" src="js/allWebPlugin.Common.js">script>
    3. <script type="text/javascript" src="js/allWebPlugin.UI.js">script>

    第二步:替换页面元素代码

    将网页中元素替换成元素。如下图所示:

    1. <td align="left">
    2. <canvas id="pluginUI" width="600" height="300">
    3. <p class="error">Sorry, It looks as though your browser does not support the canvas tag.p>
    4. canvas>
    5. td>

    第三步:拷贝控件创建方法

    拷贝控件创建方法CreateContainer及CreatePlugin,将其放到网页onload事件里面,方便页面加载时,创建控件对象。其中createProxyPlugin方法创建控件对象,需要传入控件的classid或者ProgID。

    1. var allWebDesktop;
    2. var hostCnt = null;
    3. function init(){
    4. CreateContainer();
    5. }
    6. function CreateContainer(){
    7. var canvas = document.getElementById('pluginUI');
    8. var license = "1q1Sc/tJ1FY2I0gjyovEBlL5O+XF5WrNG0Aq8HHaqVcms51Cl0VS4bYdxltvoHzOdQDEmT8XQhfQhaGxcNiqLQ7oiY85BP8ZsOWCPD3ZYQ5mr14faRu6F8yxXVpgkOeRRlN4clA0lwQi3c0+X/Tvd7BRJKX9uDxkShM9orLUJA119NS++hnfEOcexzvMhL2FWjkNGa2ufV2WjC1M8hbdQSr7uy8b2H7Fiz/HMiWYEFmAnrjDytIx4njwJtO7GYCBKYIE1VGI7iWq9iz4XCIKk1sp1hje01FJCtYPj51+uHfLuWWKatvlFHzSb2IMOSpzAAAA8AEAAQMCTeMq4Dd1nDTk0VXbvFd/Yei0Ojtv60nU4n3yDQuFlxUPwKCQDmQifomaE8DZQR8bEhucH7wk2cabDLm4KCi+wUGvsoKR5r83cLSNLWtaRVtbPoWwMgpFnTmlMtnXrRvPjLx+l/UWPbMMuu9ObsWUU7kdG2mEJRyAFHvRqI+G5Zz8oSets7FNwxdwS2trEiCV4qsAkci3oWhu0ddb02uHzEyOg6sjqKLd9XfKYp4NGdWraSFUYhBsiU7LajQNwmlAeEXWnuNnT5XzoP4icvfojjZZjzw6Ar40ldB7kd9gLDsryZWfwDFsObrXeb9VRVHi8yJ9E17zXMLtpTjtBiIzsQABAYICCgGCMOohm/ugukXrQrv9ulJbVqBTGph9ScEeDPMd5ll5a+dDkRDGlb74ZElzA2gcCi9Xn+FtdXTegKWXRUH5ea5xKhN/6eZgBGL4isdUwaclkKUdq1k60BDQgbvrIx2aRt+io7NnbVJortQQpPWpy/jzQV/aFu+PB/PWwdt/wBHfqgXQw7a1R99EaK6VLtrP7PUURODEIRGk+lP+rFD08z6O/wIXk722B87lfRh+gBoRvhRchXcvlvhqBC3OM7XEBbDLgcvHQvYzm67qxcWvSNJnub+9YxB/7eYR3sE8iJ+h9sfkNE7BYeQ0HwyQpIfCp+3s7nWn8nHBOtbx2Vf5sFBaxHYAAAEOAAAAAUFXUEY=";
    9. var installPackageUrl = "http://127.0.0.1:6651/install/allwebPlugin_x86_v2.0.1.16_20240806.exe";
    10. var installPackageVersion = "2.0.0.20";
    11. hostCnt = new PluginHostCnt();
    12. if(hostCnt.IsInstall() == false){
    13. //未安装,需要手动安装
    14. if(confirm("allWebPlugin中间件未安装或未启动,是否立即安装?")){
    15. window.open(installPackageUrl, '_blank');
    16. }
    17. }else{
    18. //已安装,检测是否需要版本更新
    19. if(hostCnt.IsNewVersion(installPackageVersion) == false)
    20. {
    21. if(hostCnt.createContainer(canvas,"PluginContainer",license,false,true) == true)
    22. {
    23. //hostCnt.UI.ForceShowUI(false);//创建时隐藏插件,需要调用这句,隐藏插件
    24. CreatePlugin();
    25. }
    26. }else{
    27. //需要升级
    28. alert("检测到升级包,立即升级。");
    29. hostCnt.UpdateVersion(installPackageUrl).then(function(data){
    30. if(data.code == 0)
    31. { //检测是否安装成功
    32. var checkInstall = setInterval(function(){
    33. if(hostCnt.GetVersion() == installPackageVersion){
    34. window.location.reload();
    35. clearTimeout(checkInstall);
    36. }
    37. }, 1000);
    38. }
    39. else{
    40. window.open(installPackageUrl, '_blank');//直接下载包,手动安装
    41. }
    42. }).catch(function(strErr){
    43. window.open(installPackageUrl, '_blank');//直接下载包,手动安装
    44. });
    45. }
    46. }
    47. }
    48. function CreatePlugin(){
    49. if(hostCnt == null)
    50. return;
    51. allWebDesktop = hostCnt.createProxyPlugin("{c8a21e7f-d127-445d-af66-cfd3c8d1b765}");
    52. }

    第四步:插件接口调用

    调用插件对象接口,注意:调用插件读属性与传统调用存在差异,需要在属性后面加上“()”方可获取属性值(仅适合createProxyPlugin方法创建的插件对象)。如下图所示:

    1. function openFile(){
    2. var pluginUtilityObj = hostCnt.getPluginUtility();
    3. pluginUtilityObj.GetLocalOpenDialog("docx文件(*.docx;*.doc);;excel文件(*.xls;*.xlsx);;所有文件(*.*)").then(function(varFile){
    4. console.log(varFile);
    5. if(varFile != "")
    6. allWebDesktop.Open(varFile,"");//插件Open方法
    7. });
    8. }
    9. function Close(){
    10. allWebDesktop.Close(0);//插件Open方法
    11. }

    完整代码如下:

    1. <HTML>
    2. <HEAD>
    3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312"/>
    4. <TITLE>对象 allWebDesktop 的 ATL 测试页TITLE>
    5. HEAD>
    6. <script type="text/javascript" src="js/jquery.min.js">script>
    7. <script type="text/javascript" src="js/allWebPlugin.Common.js">script>
    8. <script type="text/javascript" src="js/allWebPlugin.UI.js">script>
    9. <script language="javascript" type="text/javascript">
    10. var allWebDesktop;
    11. var hostCnt = null;
    12. function init(){
    13. CreateContainer();
    14. }
    15. function CreateContainer(){
    16. var canvas = document.getElementById('pluginUI');
    17. var license = "1q1Sc/tJ1FY2I0gjyovEBlL5O+XF5WrNG0Aq8HHaqVcms51Cl0VS4bYdxltvoHzOdQDEmT8XQhfQhaGxcNiqLQ7oiY85BP8ZsOWCPD3ZYQ5mr14faRu6F8yxXVpgkOeRRlN4clA0lwQi3c0+X/Tvd7BRJKX9uDxkShM9orLUJA119NS++hnfEOcexzvMhL2FWjkNGa2ufV2WjC1M8hbdQSr7uy8b2H7Fiz/HMiWYEFmAnrjDytIx4njwJtO7GYCBKYIE1VGI7iWq9iz4XCIKk1sp1hje01FJCtYPj51+uHfLuWWKatvlFHzSb2IMOSpzAAAA8AEAAQMCTeMq4Dd1nDTk0VXbvFd/Yei0Ojtv60nU4n3yDQuFlxUPwKCQDmQifomaE8DZQR8bEhucH7wk2cabDLm4KCi+wUGvsoKR5r83cLSNLWtaRVtbPoWwMgpFnTmlMtnXrRvPjLx+l/UWPbMMuu9ObsWUU7kdG2mEJRyAFHvRqI+G5Zz8oSets7FNwxdwS2trEiCV4qsAkci3oWhu0ddb02uHzEyOg6sjqKLd9XfKYp4NGdWraSFUYhBsiU7LajQNwmlAeEXWnuNnT5XzoP4icvfojjZZjzw6Ar40ldB7kd9gLDsryZWfwDFsObrXeb9VRVHi8yJ9E17zXMLtpTjtBiIzsQABAYICCgGCMOohm/ugukXrQrv9ulJbVqBTGph9ScEeDPMd5ll5a+dDkRDGlb74ZElzA2gcCi9Xn+FtdXTegKWXRUH5ea5xKhN/6eZgBGL4isdUwaclkKUdq1k60BDQgbvrIx2aRt+io7NnbVJortQQpPWpy/jzQV/aFu+PB/PWwdt/wBHfqgXQw7a1R99EaK6VLtrP7PUURODEIRGk+lP+rFD08z6O/wIXk722B87lfRh+gBoRvhRchXcvlvhqBC3OM7XEBbDLgcvHQvYzm67qxcWvSNJnub+9YxB/7eYR3sE8iJ+h9sfkNE7BYeQ0HwyQpIfCp+3s7nWn8nHBOtbx2Vf5sFBaxHYAAAEOAAAAAUFXUEY=";
    18. var installPackageUrl = "http://127.0.0.1:6651/install/allwebPlugin_x86_v2.0.1.16_20240806.exe";
    19. var installPackageVersion = "2.0.0.20";
    20. hostCnt = new PluginHostCnt();
    21. if(hostCnt.IsInstall() == false){
    22. //未安装,需要手动安装
    23. if(confirm("allWebPlugin中间件未安装或未启动,是否立即安装?")){
    24. window.open(installPackageUrl, '_blank');
    25. }
    26. }else{
    27. //已安装,检测是否需要版本更新
    28. if(hostCnt.IsNewVersion(installPackageVersion) == false)
    29. {
    30. if(hostCnt.createContainer(canvas,"PluginContainer",license,false,true) == true)
    31. {
    32. //hostCnt.UI.ForceShowUI(false);//创建时隐藏插件,需要调用这句,隐藏插件
    33. CreatePlugin();
    34. }
    35. }else{
    36. //需要升级
    37. alert("检测到升级包,立即升级。");
    38. hostCnt.UpdateVersion(installPackageUrl).then(function(data){
    39. if(data.code == 0)
    40. { //检测是否安装成功
    41. var checkInstall = setInterval(function(){
    42. if(hostCnt.GetVersion() == installPackageVersion){
    43. window.location.reload();
    44. clearTimeout(checkInstall);
    45. }
    46. }, 1000);
    47. }
    48. else{
    49. window.open(installPackageUrl, '_blank');//直接下载包,手动安装
    50. }
    51. }).catch(function(strErr){
    52. window.open(installPackageUrl, '_blank');//直接下载包,手动安装
    53. });
    54. }
    55. }
    56. }
    57. function CreatePlugin(){
    58. if(hostCnt == null)
    59. return;
    60. allWebDesktop = hostCnt.createProxyPlugin("{c8a21e7f-d127-445d-af66-cfd3c8d1b765}");
    61. }
    62. function openFile(){
    63. var pluginUtilityObj = hostCnt.getPluginUtility();
    64. pluginUtilityObj.GetLocalOpenDialog("docx文件(*.docx;*.doc);;excel文件(*.xls;*.xlsx);;所有文件(*.*)").then(function(varFile){
    65. console.log(varFile);
    66. if(varFile != "")
    67. allWebDesktop.Open(varFile,"");
    68. });
    69. }
    70. function Close(){
    71. allWebDesktop.Close(0);
    72. }
    73. function openWebFile()
    74. {
    75. if(allWebDesktop){
    76. var pluginUtilityObj = hostCnt.getPluginUtility();
    77. var httpclientObj = hostCnt.getHttpClient();
    78. httpclientObj.Clear();
    79. if (httpclientObj.Open(0, "https://local.zsignyun.com:6652/doc/test.jt", false)) {
    80. httpclientObj.Send().then(function(data){
    81. if (httpclientObj.GetStatus() == 200) {
    82. var varTempPath = pluginUtilityObj.GetTempPath();
    83. var varFile = pluginUtilityObj.GetTempFileName(varTempPath,"zso") + ".jt";
    84. httpclientObj.ResponseSaveToFile(varFile);
    85. allWebDesktop.Open(varFile,"");
    86. }
    87. else{
    88. var httpStatus = httpclientObj.GetStatus();
    89. if(httpclientObj.GetStatus() == 0)
    90. {
    91. alert("LoadFile test.jt Error:" + httpclientObj.GetErrorText());
    92. }else{
    93. alert("LoadFile test.jt Status:" + httpStatus + ",请确保安装目录下web\doc目录存在test.jt");
    94. }
    95. }
    96. httpclientObj.Close();
    97. });
    98. }
    99. }
    100. }
    101. script>
    102. <BODY onload="init()">
    103. <p align="center"><b><span class="style1">allWebDesktop 演示页面span><br class="style1" />p>
    104. <button onclick="openFile()">打开文档button>
    105. <button onclick="Close()">关闭button>
    106. <button onclick="openWebFile()">打开在线jt文档button>
    107. <table style="width:100%;height:80%" border="0" align="center">
    108. <tr style="width:100%;height:80%">
    109. <td style="width:100%;height:80%">
    110. <canvas id="pluginUI" style="width:100%;height:100%">
    111. <p class="error">Sorry, It looks as though your browser does not support the canvas tag.p>
    112. canvas>
    113. td>
    114. tr>
    115. table>
    116. BODY>
    117. HTML>

  • 相关阅读:
    我叫:冒泡排序【JAVA】
    conan使用包以及管理(2)
    Hello Java,Java简介及第一个Java程序
    redis(3)-hiredis-API函数的调用
    留存怎么算?
    Vue3 Vite electron 开发桌面程序
    数据结构题目收录(七)
    Java版直播商城免 费 搭 建:电商、小程序、三级分销及免 费 搭 建,平台规划与营销策略全掌握
    Linux服务:Nginx反向代理与负载均衡
    2022年施工企业数字化转型思考,施工企业数字化转型之路
  • 原文地址:https://blog.csdn.net/yunkaipx/article/details/143314451