当前位置: 首页 > news >正文

Firefox扩展程序和Java通信

实现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收到的消息:

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • C# Task.WaitAll 的用法
  • BGP选路之Local Preference
  • table car vs. table cars:数据库命名用单数还是复数?
  • OpenCV图像滤波(1)双边滤波函数bilateralFilter的使用
  • 小规模的LLMS
  • C# 使用pythonnet 迁入 python 初始化错误解决办法
  • GO版本更新
  • [Meachines] Lame smbd3.0-RCE
  • 一文解决 | Linux(Ubuntn)系统安装 | 硬盘挂载 | 用户创建 | 生信分析配置
  • 可能是目前最全面的前端提测/自测标准
  • AI有关的学习和python
  • 数据结构-C语言-排序(4)
  • 测试工作中常听到的名词解释 : )
  • Java中的object类与objects类
  • paramiko 模块
  • ----------
  • php的引用
  • Android优雅地处理按钮重复点击
  • AngularJS指令开发(1)——参数详解
  • css系列之关于字体的事
  • es的写入过程
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • express + mock 让前后台并行开发
  • JAVA 学习IO流
  • Java应用性能调优
  • JS 面试题总结
  • 订阅Forge Viewer所有的事件
  • 构造函数(constructor)与原型链(prototype)关系
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 世界上最简单的无等待算法(getAndIncrement)
  • 通信类
  • 小而合理的前端理论:rscss和rsjs
  • 延迟脚本的方式
  • nb
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • ###项目技术发展史
  • #NOIP 2014#Day.2 T3 解方程
  • ()、[]、{}、(())、[[]]命令替换
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (9)目标检测_SSD的原理
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (十八)Flink CEP 详解
  • (数据结构)顺序表的定义
  • (转)ObjectiveC 深浅拷贝学习
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .NET 反射的使用
  • .net 连接达梦数据库开发环境部署
  • .Net(C#)常用转换byte转uint32、byte转float等
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args
  • .Net6 Api Swagger配置