让delphi解析chrome扩展的native应用

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 start
chrome.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位长度,非常容易出错。

  

时间: 2024-10-05 11:11:24

让delphi解析chrome扩展的native应用的相关文章

Chrome 扩展机制

据说,今年9月份开始,谷歌将在Chrome浏览器中全面禁用NPAPI插件,Chrome 45以后将无法再加载NPAPI插件,并推出了一种新的机制:扩展. 其实,如果把浏览器看作一块画布的话,NPAPI插件就像挂在画布上的各种小饰品,而扩展更像拼接在画布外小拼图.无论是插件还是扩展,都是为了让这副画更符合用户的期望.下面就只准备简单介绍一下扩展和Native Message机制. 扩展安装包 一个完整的扩展包,最终会一个.crx的压缩文件包存在,使用zip的解压文件可以直接打开的. 扩展安装,共有

实现chrome扩展启动本地进程 - 补充

实现chrome扩展启动本地进程 - 补充 标签: chrome扩展启动本地程序访问本地磁盘 2014-10-17 11:42 6753人阅读 评论(17) 收藏 举报  分类: Chrome Plugin 版权声明:本文为博主原创文章,未经博主允许不得转载. 示例 主要包含如下部分 com.google.chrome.demo-win.json native_cmd.bat manifest.json popup.html popup.js 功能简介: 实现一个扩展,用户点击一个按钮后会启动本

Chrome扩展开发之Chrome扩展的文件结构

一个Chrome扩展包括一系列文件,HTML文件.CSS样式文件.JavaScript脚本.图片等,以及一个最有特点的manifest.json. 1. manifest.json是啥 它是每个chrome扩展有且只有一个的清单文件,它指明了该扩展的基本信息,如名称.版本.需要的权限等等,格式是json. JSON JSON是一种独立于语言和平台的数据格式,JSON对象就是一种格式化的静态的数据,接下来的chrome扩展中各模块之间交换信息就是用这种格式.传送时就是作为简单的字符串来传,js在收

自己做一款简易的chrome扩展--清除页面广告

大家肯定有这样的经历,浏览网页的时候,左右两端广告,诸如“屠龙宝刀,点击就送”,以及最近火的不行的林子聪37传奇霸业什么“霸业面具,霸业吊坠”的魔性广告总是充斥我们的眼球. 当然有现成的扩展程序或者插件(两者概念稍有不同)可以清除页面广告,但是既然身为一名程序猿,尤其是FEDer,为什么不尝试一下自己写一个清除广告的扩展程序呢.其实,编写一个浏览器扩展程序十分简单,尤其是chrome扩展,可以完全使用前端技术(HTML/CSS/JS)完成一个自己编写的扩展程序.让我们一步一步,学习一下如何编写一

一起来做chrome扩展《本地存储localStorage》

chrome中的本地存储其实也是用的HTML5中localStorage,唯一区别是chrome扩展有自己的localStorage,它属于这个扩展,而不属于一个域名.得用这一点可以很好的处理扩展自己的一些数据,而不受访问网站和域名的影响. localStorage基础 localStorage是HTML5特性,所以有些浏览器不一定支持,不过我们这里讲的是chrome扩展,所以完全不用担心这个问题.如果想在WEB页面上使用,那就要检查一下是不是支持它 可以这样的检测: if(window.loc

来说一说chrome扩展和chrome插件到底有什么区别?

想讨论chrome扩展和chrome插件区别这个话题很久了!但是迟迟没有写.因为我自己也没有搞清楚这两者之间的区别!回想当初是因为需要寻找番羽墙插件才想到去搜索到chrome插件. 想讨论chrome扩展和chrome插件区别这个话题很久了!但是迟迟没有写.因为我自己也没有搞清楚这两者之间的区别!回想当初是因为需要寻找番羽墙插件才想到去维护一个类似的插件网.我甚至问过身边很多程序员这两者之间的区别,说实话能说清楚的也没有几个.今日在论坛里看到有热心的网友推荐这个chrome网,甚是欣慰.但是看到

【前端工具】Chrome 扩展程序的开发与发布 -- 手把手教你开发扩展程序

关于 chrome 扩展的文章,很久之前也写过一篇.清除页面广告?身为前端,自己做一款简易的chrome扩展吧. 本篇文章重在分享一些制作扩展的过程中比较重要的知识及难点. 什么是 chrome 扩展程序 扩展程序是一些能够修改或增强 Chrome 浏览器功能的小程序.对于前端工程师而言,其最大的便利就是我们可以应用我们熟悉的 HTML.CSS . Javascript 等技术来制作扩展程序. 如下图所示,这些图标就是各种开发者提供的 chrome 扩展程序: 区分扩展与插件 很多人会误称扩展程

那些离不开的 Chrome 扩展插件

虽然Chrome浏览器是个吃内存的怪兽,但是,它却因为启动速度.调试功能等成为了程序猿的必备浏览器!今天有时间,整理一下自己最常用的一些Chrome扩展吧: 常用网页浏览非开发类扩展: Tampermonkey 推荐指数:★★★★★ 最近发现的神器啊,哈哈,很喜欢,利用脚本比安装扩展少用内存啊!速度还快!用法也很简单--20151202更新 用法简要记录下: Greasy Fork国内油猴脚本的下载地,常用的百度网盘助手,去除贴吧列表里面的广告,CSDN去广告自动展开文章等脚本都有 当找到脚本之

安装Chrome扩展程序xpath

最近工作用到xpath,直接从浏览器复制下来路径时常会出错而且长度很长,于是我想到之前用过的一款chrome插件,可以直接编写xpath语句,并实时出现解析出的结果,检验xpath语句是否编写正确.效果如下: 下面讲一下怎么安装xpath.第一种方法就是scientific上网后点击chrome扩展程序然后在应用商店下载.第二种方法就是今天要所讲的先在网上下载xpath,然后在chrom扩展程序中安装. 首先需要下载xpath,资源网上寻找即可,下载之后把扩展名为crx的文件的扩展名更改为zip