Firefox扩展程序和Java通信

news2024/9/19 10:36:28

实现Firefox扩展程序,和Java RMI Client端进行通信。

在Firefox工具栏注册按钮,点击按钮后弹出Popup.html页面,引用Popup.js脚本,通过脚本向Java RMI client发送消息,Java RMI Client接收消息后转发到Java RMI Server。

Popup.js中的发送代码:

btnSend.addEventListener("click", function(event) {

    const sending = browser.runtime.sendNativeMessage("native.host", url.value);
  
    sending.then(function(resp) {
        txtResult.textContent = resp.message;
                
    }, function(err) {
        txtResult.textContent = err;
    });
});

注册的native.json配置文件

{
    "name": "native.host",
    "description": "Example host for native messaging",
    "path": "native.bat",
    "type": "stdio",
    "allowed_extensions": ["hook@native"]
  }

执行的native.bat代码

@echo off 
rem  echo off -> close stdout 
call java -cp "C:\Users\cc\OneDrive\src\java\RMIClient\bin" net.RMIClient

Java RMI client程序

public class RMIClient  {
	
	public static String read() throws IOException {
		byte[] _len = new byte[4];
		System.in.read(_len);

		ByteBuffer bb = ByteBuffer.wrap(_len);
		bb.order(ByteOrder.LITTLE_ENDIAN);
		int length = bb.getInt(0);
		byte[] message = new byte[length];
		System.in.read(message);
		
		return new String(message, "UTF-8");
	}
	
	public static void write(String s) throws IOException {
		byte[] utf = s.getBytes("UTF-8");
		
		ByteBuffer bb = ByteBuffer.allocate(utf.length + 4);
		bb.order(ByteOrder.LITTLE_ENDIAN);
		bb.putInt(0, utf.length);
		bb.put(4, utf);
		
		byte[] bs = bb.array();
		System.out.write(bs);
		System.out.flush();
	}

	public static void main(String[] args) throws IOException, InterruptedException, NotBoundException {
		Registry registry = LocateRegistry.getRegistry("127.0.0.1", 1099);
		IReceive receiver = (IReceive) registry.lookup("Receiver");
		
			String data =  read();
			String result = receiver.receive(data);
			write(" { \"message\":\"ok\" }" );
	}

}

运行效果,浏览器弹出框,点击"Send"发送浏览器当前地址

Java RMI Server收到的消息:

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

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

相关文章

Hadoop3:HDFS的客户端工具Big Data Tools(IDEA版本)

1、安装插件 在Plugins里搜索Big Data Tools 安装完成后,重启IDEA 2、配置Windows环境 主要是配置Hadoop环境,否则无法通过插件远程连接HDFS 1、解压hadoop安装包 2、进入hadoop的bin目录 放入图中标红的两个文件 3、配置hadoop环境变量 新建HAD…

夯实数字经济的“新基建”-基于大数据与区块链技术的新型基础设施

随着我国数据市场的蓬勃发展,构建契合数据特性、加速数据流通与价值释放的新型数据基础设施变得尤为关键。数字基础设施作为数字经济蓬勃发展的基石,其完善与否直接关系到数据能否有效存储、顺畅流通及高效利用,进而促进数据资源向数据资产的…

电脑蓝屏怎么回事?这里有全面的解决方案

电脑蓝屏是Windows操作系统中一种常见且令人头疼的问题。当电脑遇到无法处理的错误时,系统会自动停止运行并显示蓝屏,提示用户出现了严重问题。蓝屏不仅打断了工作和娱乐,还可能导致数据丢失。那么电脑蓝屏怎么回事呢?本文将介绍电…

视觉-语言-行动模型:将网络知识迁移至机器人控制(RT-2论文翻译)

RT-2: Vision-Language-Action Models Transfer Web Knowledge to Robotic Control RT-2: 用互联网知识训练的视觉语言模型融入到机器人控制中 RT1 论文翻译: https://blog.csdn.net/weixin_43334869/article/details/135850410 文章目录 RT-2: Vision-Language…

机器学习(五) -- 无监督学习(1) --聚类1

系列文章目录及链接 上篇:机器学习(五) -- 监督学习(7) --SVM2 下篇:机器学习(五) -- 无监督学习(1) --聚类2 前言 tips:标题前有“***”的内容…

Git 基础 GitHub【学习笔记】

一、Git 优势 大部分操作在本地完成,不需要联网完整性保证尽可能添加数据而不是删除或修改数据分支操作非常快捷流畅与 Linux 命令全面兼容 二、Git 程序安装 https://git-scm.com 三、Git 结构 #mermaid-svg-9Go6R1leWXWrDCqn {font-family:"trebuchet ms&quo…

【更新2022】地级市城镇 农村居民可支配收入 2001-2022

地级市城镇和农村居民的可支配收入可以用于各种科研领域。他们可以用这些资金支持基础科学研究,推动新技术和创新的发展。他们可以投资于医学研究,促进健康和医疗领域的进步。他们还可以支持环境科学研究,以解决环境问题和可持续发展挑战。此…

2.1、matlab绘图汇总(图例、标题、坐标轴、线条格式、颜色和散点格式设置)

1、前言 在 MATLAB 中进行绘图是一种非常常见且实用的操作,可以用来可视化数据、结果展示、分析趋势等。通过 MATLAB 的绘图功能,用户可以创建各种类型的图形,包括线图、散点图、柱状图、曲线图等,以及三维图形、动画等复杂的可视…

C语言 | Leetcode C语言题解之第295题数据流的中位数

题目: 题解: typedef struct Heap {int* array; //存放堆的数组int capacity;//数组的容量int len; //已存数组的大小 }Heap;/*大小根堆切换开关*/ int HeapLen(Heap* hp); //heap获取当前的堆大小 void Heap…

安装VMware Workstation Pro

一、下载 通过百度网盘分享的文件:VMware-workstation-full-16.2.4-2008... 链接:https://pan.baidu.com/s/1mDnFhLQErBlpeX_KjsgtzA 提取码:0bw7 二、安装 (1)双击exe文件 (2)安装软件 &…

本地部署Graphhopper路径规划服务(graphhopper.sh启动版)

文章目录 文章参考源码获取一、配置Java环境变量二、配置Maven环境变量三、构建graphhopper步骤1. 下载数据2. 配置graphhopper配置文件config-example.yml3. 在项目中启动命令行执行./graphhopper.sh build3.1|、遇到的问题3.1.1、pom.xml中front-maven-plugin-无法下载npm6.1…

结构型设计模式-组合模式

一、组合模式 对于这个图片肯定会非常熟悉,上图我们可以看做是一个文件系统,对于这样的结构我们称之为树形结构。在树形结构中可以通过调用某个方法来遍历整个树,当我们找到某个叶子节点后,就可以对叶子节点进行相关的操作。可以将…

Python安装库太慢?配置好这个速度飞起

经常听到初学python的小伙伴在抱怨,python安装第三方库太慢,很容易失败报错,如果安装pandas、tensorflow这种体积大的库,简直龟速。 为什么pip会很慢? 先来了解下pip,pip是一个非常流行的python包管理工具…

【苍穹】完美解决由于nginx更换端口号导致无法使用Websocket

一、报错信息 进行到websocket开发的过程中,遇到了前端报错,无法连接的提示: 经过F12排查很明显是服务端和客户端并没有连接成功。这里就涉及到之前的坑,现在需要填上了。 二、报错原因和推导 应该还记得刚开苍穹的第一天配置前…

技术实践—微前端技术应用

微前端是一种新兴的前端架构模式,是一种类似于微服务的架构,将微服务的理念应用于浏览器端。其核心理念是将一个大而单一的前端应用拆分为多个小型独立的微应用。这些微应用各自独立,可以由不同团队开发维护,部署,组合…

docker发布镜像到自己远程私有仓库

1、登录docker hub创建自己的仓库地址:https://hub.docker.com/repository/create 输入仓库名称 2.构建镜像 略过。。。。请自己查找别的资料,此篇文章只讲述镜像推送到远程 3.推送 假设你已经构建了一个镜像 web/online-editor:latest,现…

【React学习打卡第二天】

受控表单绑定、React获取Dom\组件通信、useEffect、自定义hook函数和ReactHooks使用规则 一、受控表单绑定1.准备React状态值2.通过value属性绑定状态,通过onChange属性绑定状态同步的函数 二、React中获取DOM1. 使用useRef创建 ref 对象,并与 JSX 绑定2…

使用图数据库Nebula Graph快速上手史上最大规模的中文知识图谱ownthink_v2教程(没写完,明天再写)

一、前言 本教程主要参考官方教程:使用图数据库 Nebula Graph 数据导入快速体验知识图谱 OwnThink (nebula-graph.com.cn) 来带着大家一步一步复现实验内容。 本教程主要使用到的数据集: ownthink/KnowledgeGraphData: 史上最大规模1.4亿中文知识图谱…

MySQL 存储

关系型数据库是基于关系模型的数据库, 而关系模型是通过二维表来保存的,所以关系型数据库中的数据的村方式就是行列组成的表,每一列代表一个字段,每一行代表一条记录。表可以看作某个实体的集合,实体之间存在的联系需要…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第五十三章 设备树下的platform驱动

i.MX8MM处理器采用了先进的14LPCFinFET工艺,提供更快的速度和更高的电源效率;四核Cortex-A53,单核Cortex-M4,多达五个内核 ,主频高达1.8GHz,2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…