Firefox扩展程序和Java程序通信

news2024/11/25 13:57:36

实现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/1953705.html

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

相关文章

Docker————数据卷容器,容器互联,镜像创建

1、Docker的数据管理 管理Docker容器中的数据,主要有两种方式:数据卷(Data Volumes)和数据卷容器(DataVolumes Containers). docker run [-i -t] [--name 容器名] 镜像名:标签 [容器启动命令]…

RK3568 Linux 平台开发系列讲解(内核入门篇):从内核的角度看外设芯片的驱动

在嵌入式 Linux 开发中,外设芯片的驱动是实现操作系统与硬件之间交互的关键环节。对于 RK3568 这样的处理器平台,理解如何从内核的角度构建和管理外设芯片的驱动程序至关重要。 1. 外设驱动的基础概念 外设驱动(Device Driver)是操作系统与硬件设备之间的桥梁。它负责控…

智能浇花机器人·设计说明

智能浇花机器人 目录: 第一章 :项目描述 1 1.1 项目简介 1 1.1.1 服务范围: 1 1.1.2 所处行业: 1 1.2 项目背景 1 1.3 创新点与项目特色 3 第二章 :设计说明书 4 2.1 主要构成: 4 2.1.1 循迹小车 4 2.1.2 机械…

网络编程——wireshark抓包、tcp粘包

目录 一、前言 1.1 什么是粘包 1.2 为什么UDP不会粘包 二、编写程序 文件树 客户端程序 服务器程序 tcp程序 头文件 makefile 三、 实验现象 四、改进实验 五、小作业 一、前言 最近在做网络芯片的驱动,验证功能的时候需要借助wireshark这个工具&…

DataX(二):DataX安装与入门

1. 官方地址 下载地址:http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz 源码地址:GitHub - alibaba/DataX: DataX是阿里云DataWorks数据集成的开源版本。 2. 前置要求 Linux JDK(1.8 以上,推荐 1.8) Python(推荐 Pyt…

C语言内存函数精讲

目录 引言 1.内存分配函数malloc 2.内存释放函数free 3.内存拷贝函数memcpy 4.内存移动函数memmove 5.内存设置函数memset 6.内存比较函数memcmp 总结 引言 在C语言编程中,内存管理是核心技能之一。C语言提供了一系列内存操作函数,这些函数在动…

机器学习 第7章-贝叶斯分类器

机器学习 第7章-贝叶斯分类器 7.1 贝叶斯决策论 贝叶斯决策论(Bayesian decision theory)是概率框架下实施决策的基本方法。对分类任务来说,在所有相关概率都已知的理想情形下,贝叶斯决策论考虑如何基于这些概率和误判损失来选择最优的类别标记。下面我…

Linux Vim全能攻略:实战代码,轻松掌握文本编辑神器

1. Vim简介与安装 1.1 Vim的历史与发展 Vim(Vi IMproved)是一款高度可配置的文本编辑器,它起源于1976年由Bill Joy开发的Vi编辑器。Vi是Unix系统上最古老的文本编辑器之一,因其强大的功能和高效的编辑方式而广受欢迎。随着时间的…

流媒体服务器一:搭建RTMP流媒体服务器搭建

1 安装和测试srs流媒体服务器 服务器:SRS(Simple RTMP Server,⽀持RTMP、HTTP-FLV,HLS) 推流端:ffmpeg OBS 拉流端:ffplay VLC srs播放器 1.1 安装srs流媒体服务器 官网 SRS (Simple Realtime Server) | SRS 码…

【一图流】Git下载与安装教程

下载Git Git官网:https://git-scm.com/?hlzh-cn 安装Git

全栈嵌入式C++、STM32、Modbus、FreeRTOS和MQTT协议:工业物联网(IIoT)可视化系统设计思路(附部分代码解析)

项目概述 随着工业4.0时代的到来,工业物联网(IIoT)在提高生产效率、降低运营成本和实现智能制造方面得到了广泛应用。本项目旨在开发一个全面的工业物联网监控系统,能够实时监测设备的温度、压力、振动和电流等参数,并…

浅析Jeecgboot中mybatisplus不支持Postgres SKIP LOCKED语法问题

目录 1、场景及问题 2、数据库及各框架版本信息 3、错误回放 4、根因分析及确认 5、解决问题 6、总结 1、场景及问题 场景: 在调用腾讯位置服务时有用到key值,因为每个key值都有自己的额度,所以在表里存了多个key,简称key池&…

基于Java的城市公交管理系统/SSM的城市公交查询系统/计算机专业/课设

摘 要 网络技术的不断发展,使网络成为人们的日常生活中不可缺少的一部分,而城市公交管理系统是网络的一种新型体现,它以其特有的便捷和快速的特点得到了广泛的认可。当前的城市公交管理系统不仅没有建立起整体的管理系统,为企业定…

Go语言中常见的多线程同步方法

什么是线程、进程、协程 Go 源文件经过编译器处理后,会产生可执行文件,不同系统有不同的格式。可执行文件在操作系统上执行一次,就对应一个进程 进程可以理解为执行中的程序,是一个动态的概念,同一份可执行文件执行多…

Django 表单error_messages , 表单校验提示

在Django中,error_messages是表单字段的一个参数,允许你为特定的验证错误自定义错误消息。默认情况下,Django的表单字段会为常见的验证错误提供默认的错误消息。但是,你可能想要为你的应用提供更加用户友好的或者本地化的错误消息…

成为git砖家(2): gitk 介绍

大家好,我是白鱼。这篇我们介绍 gitk。 gitk 和 fork 界面对比 当我们在 macOS 上执行 brew install git 后, 得到了 git 命令行工具。 然而这条命令并不会安装 gitk. gitk 是 git 自带的图形化界面工具,也可以称为“穷人版 fork”&#xf…

如何穿透模糊,还原图片真实面貌

目录 图像清晰化的魔法棒:AI如何穿透模糊,还原图片真实面貌 前言 论文背景 论文思路 模型介绍 复现过程 演示视频 使用方式 本文所涉及所有资源均在传知代码平台可获取。 图像清晰化的魔法棒:AI如何穿透模糊,还原图片真实面貌 在我…

使用Docker搭建MySql的主从同步+ShardingSphere搭建Mysql的读写分离

参考课程 尚硅谷ShardingSphere5实战教程(快速入门掌握核心)_哔哩哔哩_bilibili 主服务器 创建容器 docker run -d \ -p 3306:3306 \ -v /kira/mysql/master/conf:/etc/mysql/conf.d \ -v /kira/mysql/master/data:/var/lib/mysql \ -e MYSQL_ROOT…

java学习---异常

前言 由于被分母不能为0,所以代码到int yn/m;会抛出异常,停止运行下去,但是如果是个庞大的代码,因为这种小错误而整个程序崩溃,会大大影响代码整体的健壮性,所以此时就需要我们得异常处理了 选中异常代码部…

正则采集器——前端搭建

前端使用有名的饿了么管理后台,vue3版本vue3-element-admin,首先从gitee中克隆一个vue3-element-admin模板代码vue3-element-admin: Vue3 Element Admin开箱即用的中后台管理系统前端解决方案,然后在此基础上进行开发。 1、修改vite.config.…