博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
让delphi解析chrome扩展的native应用
阅读量:4703 次
发布时间:2019-06-10

本文共 1920 字,大约阅读时间需要 6 分钟。

 

http://www.cnblogs.com/freeton/p/4801163.html

chrome浏览器自从去年以来逐步去掉了对浏览器插件的支持,npapi的方案马上不可用。 当务之急要选择一个替代方案,最常用的就是扩展了。扩展程序提供了一套和本地程序交互的方案——“原生消息通信”

写本地应用的工具和语言很多,比如:C#,C++,phyon 都可以,本人对delphi熟悉一点,就说说delphi怎么接收和发送消息的吧。

Chrome扩展对原生消息通信有非常明确的说明

Chrome 浏览器在单独的进程中启动每一个原生消息通信宿主,并使用标准输入(stdin)与标准输出(stdout)与之通信。向两个方向发送消息时使用相同的格式:每一条消息使用 JSON 序列化,以 UTF-8 编码,并在前面附加 32 位的消息长度(使用本机字节顺序)。

 

怎么做呢? 

1、background.js中定义消息

var nativeHostName='com.xxx.mytest';//chrome与本地程序通信的桥梁,根据该名称进行配置项的寻找。windows下在注册表HKEY_CURRENT_USER\Software\Google\Chrome\NativeMessagingHosts内寻找,linux下在目录/etc/opt/chrome/native-messaging-hosts/寻找该名称的json文件()  //native startchrome.runtime.sendNativeMessage(nativeHostName,jsonData, function(response){    if (chrome.runtime.lastError){        console.log("lastError:" + chrome.runtime.lastError.message);    }    else{        console.log("recieved message: ", response.message);    }});

 

2、新建一个Delphi控制台程序,添加标出输入和标准输出接口即可

  接收数据的标准输入

function ReadInputJson():WideString;var     strmInput: THandleStream;    LBuffer: TBytes;    resLen:Integer;    sData: string;begin    strmInput := THandleStream.Create(GetStdHandle(STD_INPUT_HANDLE));    try        SetLength(LBuffer, 4);        strmInput.ReadBuffer(Pointer(LBuffer)^,4);        resLen:= PInteger(LBuffer)^;        SetLength(sData, resLen);        strmInput.Read(sData[1], resLen);        Result := UTF8Decode(sData);    finally       strmInput.Free;    end;    end;

 

  返回数据的标准输出

procedure WriteOutputJson(const str:String);var strmOut: THandleStream; len:Integer; json:String;begin    json:=UTF8Encode(str);    len:=Length(json);    strmOut := THandleStream.Create(GetStdHandle(STD_OUTPUT_HANDLE));    try      strmOut.Write(len,4);      strmOut.Write(PChar(json)^, len);    finally      strmOut.Free;    end;  end;

 

主要是处理UTF8编码和前32位长度,非常容易出错。

  

 

———————————————————————————————————————— 

 一个人的时候,总是在想

    我的生活到底在期待什么……

转载于:https://www.cnblogs.com/delphi-xe5/p/5797831.html

你可能感兴趣的文章
Ubuntu+caffe训练cifar-10数据集
查看>>
net 把指定 URI 的资源下载到本地
查看>>
js中 $ 未定义 或者 “xxx”未定义
查看>>
Sublime3插件安装
查看>>
[转]大型网站系统架构的演化
查看>>
非常好的JSUI
查看>>
基于EasyNVR摄像机无插件直播流媒体服务器实现类似于单点登录功能的免登录直播功能...
查看>>
python学习0day
查看>>
课堂练习之检测水军
查看>>
函数指针的使用
查看>>
位图数据结构的操作
查看>>
azkaban用户管理及权限配置
查看>>
GCD学习笔记
查看>>
PHP......会话控制SESSION与COOKIE
查看>>
[转]AchartEngineActivity引擎绘制柱状图、曲线图
查看>>
[转]javascript实现限制上传文件的大小
查看>>
我的Java设计模式-策略模式
查看>>
C# 报表接口样例,简单实用
查看>>
C++常见内存错误及解决方案
查看>>
控制台应用程序窗口无法输入汉字解决办法
查看>>