Chrome、Edge、360及Firefox浏览器加载多个ActiveX插件的介绍

news2024/9/20 0:51:57

allWebPlugin简介

      allWebPlugin中间件是一款为用户提供安全、可靠、便捷的浏览器插件服务的中间件产品致力于将浏览器插件重新应用到所有浏览器。它将现有ActiveX控件直接嵌入浏览器,实现插件加载、界面显示、接口调用、事件回调等。支持Chrome、Firefox、Edge、360等浏览器,接口调用友好、集成方便。为用户提供“信息化系统 + allWebPlugin + 插件 + 浏览器”的解决方案。

      allWebPluginV2.0.0.20版本做了很大的改造,支持了一个页面加载多个插件;解决了插件与浏览器抢焦点;同一页面加载多个插件时,插件与插件之间抢焦点的问题。实现了在Chrome、Firefox、Edge、360等浏览器上加载ActiveX插件,与IE浏览器几乎一样的功能及体验。下面将通过allWebOffice Tab多标签实例的代码向大家展示如何在同一个网页加载多个ActiveX插件。

下载地址

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

如下图所示,下载allWebPlugin_x86_v2.0.0.20_alpha_演示包_20240908.zip安装包。

安装包截图

添加定位元素

 首先,需要在正文及经办环节tab标签下,添加插件定位元素。如下图所示:

<!--正文-->
<div style="height:0px;overflow:hidden;" id="tab_zw">
	<div id="DivID" style="width:100%;height:900px;">
		<text>输入焦点测试: </text><input type="text" name="title1" id="title1" value=""/>
			<!--<canvas id="pluginUI" width="1000" height="800">
				<p class="error">Sorry, It looks as though your browser does not support the canvas tag.</p>
			</canvas>-->
			<canvas id="pluginUI_ZW" style="margin-top: 20px;width:50%;height:50%">
				<p class="error">Sorry, It looks as though your browser does not support the canvas tag.</p>
			</canvas>

	</div>
</div>
<!--正文end-->
<!--经办环节-->
<div style="height:0px;overflow:hidden;" id="tab_jbhj">
	<div id="bd_jbhj" style="width:100%;height:100%;">
		<text>输入焦点测试: </text><input type="text" name="title2" id="title2" value=""/>
		<table style="width:100%;height:100%;">
		<tr style="width:100%;height:100%;">
		<td >
		 <canvas id="pluginUI_JB" style="margin-top: 20px;width:500px;height:450px">
				<p class="error">Sorry, It looks as though your browser does not support the canvas tag.</p>
		</canvas>
		</td>
		
		<td >
		<canvas id="pluginUI_JB2" style="margin-top: 20px;width:500px;height:450px">
				<p class="error">Sorry, It looks as though your browser does not support the canvas tag.</p>
		</canvas>
		</td>
		</tr>
		</table>
	 </div>
</div>
<!--经办环节end-->

创建插件容器及插件

   与传统IE浏览器不同,Chrome、Edge、360及火狐浏览器创建ActiveX插件,需要使用allWebPkugin中间件提供的服务。具体如下:

function CreateContainer(){
	var canvas_zw = document.getElementById('pluginUI_ZW');//定位元素
	var canvas_jb = document.getElementById('pluginUI_JB');//定位元素
	var canvas_jb2 = document.getElementById('pluginUI_JB2');//定位元素
	var license = "9y4LEm/V6Su9+CP9ION3CqBZzsnSyJW2BIOmkgGdrKd6LsGVXCWlcRBxGfVF1XOPzC9WxlN0wrsQJJzy/Sb5YUhnxibuGY6cwTXP6MALEUEQFzXbytCCYZ8yuWbKwaSdWw5/nsk02HtT/EqxC9jsQEwXfCiLGpeyww5MszBO4EV6/Whk4dpno9z1IP+gYlZ5emPuZWPcA0xfdPfMd8CdZ7O2Y1kH4iqJRcUDZpZLQZzRaaxD4GC6rmYjAT+0hOxf741S1EV6EjTzdZdllR2Gc3/ho/O+lqeG77Lq/sI7eGuRrB92QT4P/dmWmDpM0Qg9AAAA8AEAAQMCpzvCVYrodJHnQlzcchghAVhG8HkPd/M3WbD7ikYNYSMNpadQHw22md/os+H8in1qcUBIUHlshxFEKT84jEPIP39iTN7E4IqEACvPF8duWkErP8vRvrSSxA67jQEesJV2RkXphVUw20qAYDXse5UBsLuIlpsfae59Q3VuDFyGZ9K7Rj3fGG7lMrQxhNPj0IkDKfsa/4S2vDl43A4JLdGE8PyHMOxOGWIBwAzTQvOIA2gT2bC8bUP2HnHz//04r8CZ848wnMgZ8ifdtBGgPIIvhvhNvdHNW3d7GDWIFz7migklvNukCsVNhNjck73Co8JMQppp5n4RY5Ck0DdBVe1iogABAYICCgGCMEGy6w+KRf1qX5NoDdyEKnrHfuE5hco4f/fwKsNo3Dwo1sUFB9hbxusOUSAAyYDfvQWc4CdxoSf7kM4ojInlHHvTw0ppKCFV7H17iDOXdJFKZmkjeFCeubn3VezepCvW1+Z9s84M2uILZgIGw7eIQ/je0Bz+qEWyiqWbA4QYiTHzUwQtZyntNcqYpS0PxXXmV9I21wh48DIV/9DTeZW5OZwRcHivVXFaqW2uxngqGdbw1xyJ9AMhrGdt9S2R2rd1jzNq7ddiKN09TCt806vlF1zGAxb5zq6WjwPxeG7aoE33cTRnEg5WvNM4puhmYOWYi61D8j8lzXheUCJGpsw39CoAAAEOAAAAAUFXUEY=";	
	var installPackageUrl = "http://127.0.0.1:6651/install/allwebPlugin_x86_v2.0.1.16_20240806.exe";
	var installPackageVersion = "2.0.0.16";
	g_allWebPlugin = new allWebPlugin();
	if(g_allWebPlugin.IsInstall() == false){
		//未安装,需要手动安装
		if(confirm("allWebPlugin中间件未安装或未启动,是否立即安装?")){
			window.open(installPackageUrl, '_blank');
		}
	}else{
		//已安装,检测是否需要版本更新
		if(g_allWebPlugin.IsNewVersion(installPackageVersion) == false)
		{
			hostCnt_zw = g_allWebPlugin.createContainer(canvas_zw,"PluginContainer",license,false);//创建插件容器
			if(hostCnt_zw)
			{	
				hostCnt_zw.UI.ForceShowUI(false);//创建时隐藏插件,需要调用这句,隐藏插件
				hostCnt_zw.RegisterEvent("OnCreated;OnCommand;OnRibbonCtrlCommand;OnOLECommand");
				allWebOfficeAx_zw = CreatePlugin(hostCnt_zw);//创建插件
			}
			hostCnt_jb = g_allWebPlugin.createContainer(canvas_jb,"PluginContainer",license,false);
			if(hostCnt_jb)
			{	
				hostCnt_jb.UI.ForceShowUI(false);//创建时隐藏插件,需要调用这句,隐藏插件
				hostCnt_jb.RegisterEvent("OnCreated;OnCommand;OnRibbonCtrlCommand;OnOLECommand");
				allWebOfficeAx_jb = CreatePlugin(hostCnt_jb);
			}
			hostCnt_jb2 = g_allWebPlugin.createContainer(canvas_jb2,"PluginContainer",license,false);
			if(hostCnt_jb2)
			{	
				hostCnt_jb2.UI.ForceShowUI(false);//创建时隐藏插件,需要调用这句,隐藏插件
				hostCnt_jb2.RegisterEvent("OnCreated;OnCommand;OnRibbonCtrlCommand;OnOLECommand");
				allWebOfficeAx_jb2 = CreatePlugin(hostCnt_jb2);
			}
		}else{
			//需要升级
			alert("检测到升级包,立即升级。");
			g_allWebPlugin.UpdateVersion(installPackageUrl).then(function(data){
				if(data.code == 0)
				{	//检测是否安装成功
					var checkInstall = setInterval(function(){
						if(g_allWebPlugin.GetVersion() == installPackageVersion){
							window.location.reload();
							clearTimeout(checkInstall);
						}
					}, 1000);
					
				}
				else{
					window.open(installPackageUrl, '_blank');//直接下载包,手动安装
				}
			}).catch(function(strErr){
				window.open(installPackageUrl, '_blank');//直接下载包,手动安装
			});
		}
	}
}
function CreatePlugin(hostCnt){
	var officePlugin;
	if(hostCnt == null)
		return officePlugin;
	//{6888ECA8-57D0-6E0E-9B9B-F1FF9B2DBD86} allWebOffice
	//{C7F277DC-6C47-AB2C-FB6A-070DC8BE7533} suwellreader
	//{D89F482C-5045-4DB5-8C53-D2C9EE71D025} 老东家iWebOffice2015
	//{9BE31822-FDAD-461B-AD51-BE1D1C159921}  VLC
	//{082ECC40-38F1-4E8F-82D3-216009A96686}  RSignReader
	var officePlugin = hostCnt.createProxyPlugin("{6888ECA8-57D0-6E0E-9B9B-F1FF9B2DBD86}");
	if(officePlugin != null)
	{
		officePlugin.GetDisplayStyle().ShowOpenProgress = false;
	}
	return officePlugin;
}

ActiveX插件接口调用

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

/*
*打开远程大文档
*/
function openOnWebFile(){
	if(!g_allWebPlugin.ActivateContainer) return;
	var pluginUtilityObj = g_allWebPlugin.ActivateContainer.getPluginUtility();
	var httpclientObj = g_allWebPlugin.ActivateContainer.getHttpClient();
	httpclientObj.Clear();
	if (httpclientObj.Open(0, "http://127.0.0.1:6651/test2.docx", false)) {
		httpclientObj.Send().then(function(data){
			if (httpclientObj.GetStatus() == 200) {
				var varTempPath = pluginUtilityObj.GetTempPath();
				var varFile = pluginUtilityObj.GetTempFileName(varTempPath,"zso") + ".docx";
				httpclientObj.ResponseSaveToFile(varFile);
				g_allWebPlugin.ActivateContainer.ObjectAx.Open(varFile);
				g_allWebPlugin.ActivateContainer.ObjectAx.DeleteAfterClose = true;
			}
			else{
				alert("LoadFile test2.docx Status:" + httpclientObj.GetStatus() + ",请确保安装目录下web目录存在test2.docx");
			}
			httpclientObj.Close();
		});	
	 }
}

显示效果

 下面展示了allWebOffice Tab标签示例效果,实现了在谷歌、火狐、360及Edge等浏览器同一页面加载多个插件的效果。

正文tab标签页加载电子表格文档

经办环节tab标签页,同时加载两个插件,打开Word文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2116701.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vc-align源码分析 -- ant-design-vue系列

vc-align源码分析 源码地址&#xff1a;https://github.com/vueComponent/ant-design-vue/tree/main/components/vc-align 1 基础代码 1.1 名词约定 需要对齐的节点叫source&#xff0c;对齐的目标叫target。 1.2 props 提供了两个参数&#xff1a; align&#xff1a;对…

成为优秀程序员-代码篇

1. 序言 刚毕业参加工作时候&#xff0c;公司正在快速扩张&#xff0c;我入职的时候组内刚刚招了一大波人&#xff0c;当时leader提出集体cr代码来拉齐团队内的编码规范&#xff0c;每当有对于相对重要改动大的项目就会集体cr代码&#xff0c;老板想法初衷是好的&#xff0c;但…

esp32 gpio 初始化不同类型的管脚,产生脉冲,发生中断

硬件&#xff1a;D4与D18 连接&#xff0c;二极管接D15与3.3v脚 图片 二极管同期性点亮&#xff0c;间隔1秒 参考esp32官网程序&#xff0c;从此程序可以看出&#xff0c;中断程序没有处理任何数据&#xff0c;只是把中断发生的事件存入队列。而用另一新线程来处理中断事务。…

GNSS CTS GNSS Start and Location Flow of Android15

目录 1. 本文概述2.CTS 测试3.Gnss Flow3.1 Gnss Start Flow3.2 Gnss Location Output Flow 1. 本文概述 本来是为了做Android 14 Gnss CTS 的相关环境的搭建和测试&#xff0c;然后在测试中遇到了一些问题&#xff0c;去寻找CTS源码(/cts/tests/tests/location/src/android/l…

Vue3-05_组件高级

背景 对组件的进一步了解,如组件之间通信等知识点&#xff0c;根据教程实现购物车功能&#xff0c;并修复原本的bug. watch 侦听器 用途 watch 侦听器允许开发者监视数据的变化&#xff0c;从而针对数据的变化做特定的操作。例如&#xff0c;监视用户名的变化并发起请求&am…

大模型AI一体机对行业的帮助

大模型AI一体机&#xff0c;如AntSKPro AI离线知识库一体机&#xff0c;是专门为企业和机构设计的集成系统&#xff0c;旨在提供高效的人工智能服务。这类一体机通常包含预训练的大型机器学习模型&#xff0c;以及必要的硬件和软件资源&#xff0c;以支持复杂的数据处理和分析任…

maven 编译构建可以执行的jar包

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storm…

网易云音乐歌单下载器

最近要帮小朋友下载一些小学的诗词mp3&#xff0c;找了各种工具&#xff0c;还是这个好使 yun-playlist-downloader: 网易云音乐歌单下载器 特性 支持歌单 / 专辑 / 电台音质选择下载超时 / 重试再次下载默认跳过已下载部分, 使用 content-length 匹配自定义文件名下载进度显…

【代码随想录训练营第42期 Day53打卡 - 图论Part4 - 卡码网 110. 字符串接龙 105. 有向图的完全可达性

目录 一、个人感受 二、题目与题解 题目一&#xff1a;卡码网 110. 字符串接龙 题目链接 题解&#xff1a;BFS哈希 题目二&#xff1a;卡码网 105. 有向图的完全可达性 题目链接 题解&#xff1a;DFS 三、小结 一、个人感受 对于两大基本搜索&#xff1a; 深度优先搜…

JDBC:连接数据库

文章目录 报错 报错 Exception in thread “main” java.sql.SQLException: Can not issue SELECT via executeUpdate(). 最后这里输出的还是地址&#xff0c;就是要重写toString()方法&#xff0c;但是我现在还不知道怎么写 修改完的代码&#xff0c;但是数据库显示&#…

WebGL系列教程二(环境搭建及初始化Shader)

目录 1 前言2 新建html页面3 着色器介绍3.1 顶点着色器、片元着色器与光栅化的概念3.2 声明顶点着色器3.3 声明片元着色器 4 坐标系(右手系)介绍5 着色器初始化5.1 给一个画布canvas5.2 获取WebGL对象5.3 创建着色器对象5.4 获取着色器对象的源5.5 绑定着色器的源5.6 编译着色器…

MiniGPT-3D, 首个高效的3D点云大语言模型,仅需一张RTX3090显卡,训练一天时间,已开源

项目主页&#xff1a;https://tangyuan96.github.io/minigpt_3d_project_page/ 代码&#xff1a;https://github.com/TangYuan96/MiniGPT-3D 论文&#xff1a;https://arxiv.org/pdf/2405.01413 MiniGPT-3D在多个任务上取得了SoTA&#xff0c;被ACM MM2024接收&#xff0c;只拥…

佰朔资本:9月首选行业为汽车、电子、医药生物等

5—8月商场接连调整&#xff0c;9月开端进入成绩空窗期&#xff0c;流动性和政策改动从头成为商场中心驱动力&#xff0c;风格切换先行&#xff0c;对当时的商场能够豁达一些。价值和生长风格切换的拐点开始闪现&#xff0c;生长相对价值的成绩优势开端走扩&#xff0c;美联储降…

Axure中继器介绍

中继器我们一般在处理重复性比较高的任务时&#xff0c;能让我们达到事半功倍的效果&#xff0c;中继器在整个axure中属于复杂程度比较高的功能&#xff0c;我们今天大致讲一下常用的方法即可。 一、声明一个中继器 默认展示为三行。 点击样式&#xff0c;这里我们可以添加删…

【原创】java+springboot+mysql校园二手商品交易网设计与实现

个人主页&#xff1a;程序猿小小杨 个人简介&#xff1a;从事开发多年&#xff0c;Java、Php、Python、前端开发均有涉猎 博客内容&#xff1a;Java项目实战、项目演示、技术分享 文末有作者名片&#xff0c;希望和大家一起共同进步&#xff0c;你只管努力&#xff0c;剩下的交…

RestTemplateRibbonOpenFeign

网络模型 OSI七层模型 RestTemplate Ribbon 在微服务中的ribbon 实现负载均衡服务间调用的三种方式 ribbon其他负载均衡策略 OpenFeign 实战

【Shiro】Shiro 的学习教程(五)之 SpringBoot 集成 Shiro + JWT

与 Spring 集成&#xff1a;与 Spring 集成 与 SpringBoot 集成&#xff1a;与 SpringBoot 集成 1、SpringBoot Shiro Jwt ①&#xff1a;引入 pom.xml&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-…

使用kubeadm手动安装K8s

本次教程安装主要基于Ubuntu 22.04&#xff0c; 使用AWS EC2服务器来部署。当然&#xff0c;AWS也有自己的AWS K8s服务&#xff0c;不过需要花费小钱钱。虽然也不是说不行&#xff0c;但手动安装下也能熟悉K8s。 1. 安装Docker 卸载旧版本&#xff1a; sudo apt-get re…

数据结构与算法 第12天(排序)

一、排序方法分类 按照数据存储介质&#xff1a; 内部排序&#xff1a;数据量不大、数据在内存&#xff0c;无需内外存交换数据 外部排序&#xff1a;数据量较大、数据在外存(文件排序) 将数据分批调入内存排序&#xff0c;结果放到外存 按照比较器个数&#xff1a; 串行…

微带结环行器仿真分析+HFSS工程文件

微带结环行器仿真分析HFSS工程文件 工程下载&#xff1a;微带结环行器仿真分析HFSS工程文件 我使用HFSS版本的是HFSS 2024 R2 参考书籍《微波铁氧体器件HFSS设计原理》和视频微带结环行器HFSS仿真 1、环形器简介 环行器是一个有单向传输特性的三端口器件&#xff0c;它表明…