编写chrome插件,调用本地应用程序,并进行通讯(发送信息给应用程序)

开发说明

1、浏览器插件实现
manifest.json文件内容。每个chrome的插件都需要该文件,该文件记录插件的关键信息

复制代码
{
    "name" : "callapp",
    "version" : "1.0.1",
    "description" : "call local application",
    "background" : { "scripts": ["background.js"] },
    "icons": {
        "16": "16.png",
        "128": "128.png"
    },
    "permissions" : [
    "nativeMessaging",
    "contextMenus",
    "tabs"
    ],
    "minimum_chrome_version" : "6.0.0.0",
    "manifest_version": 2
}
复制代码

其中由于需要在右键菜单中增加选项,在permissions中增加"nativeMessaging"、"contextMenus"两项;需要和本地程序进行通讯,增加"nativeMessaging"项

maniffest.json所需要的background.js

复制代码
//Author: jyx
//Date: 2014.10.11
//Description: This is a javaScript file use for handle contextMenus action
//When click the contextMenus, it will sent the infomation to native app

//connect to native app
var port = null;
var nativeHostName = "com.ctrip.ops.mysql.callapp";//chrome与本地程序通信的桥梁,根据该名称进行配置项的寻找。windows下在注册表HKEY_CURRENT_USER\Software\Google\Chrome\NativeMessagingHosts内寻找,linux下在目录/etc/opt/chrome/native-messaging-hosts/寻找该名称的json文件(本例子为com.ctrip.ops.mysql.callapp.json)

//onNativeDisconnect
function onDisconnected()
{
    //alert("连接到FastDownload服务失败: " + chrome.runtime.lastError.message);
    port = null;
}

//connect to native host and get the communicatetion port
function connectToNativeHost()
{
    port = chrome.runtime.connectNative(nativeHostName);//根据配置文件连接到本地程序
    port.onDisconnect.addListener(onDisconnected);
}

//调用connectToNativeHost函数连接到本地程序,完成后使用port.postMessage函数将纤细传递给应用程序
//将信息写入I/O流与本地程序通信
function getClickHandler() {
      return function(info, tab) { 
        connectToNativeHost();
        port.postMessage(info.linkUrl);
      };
};

//在浏览器启动时即创建右键菜单,在页面链接上右击鼠标会显示该菜单,当点击"start program"的时候就会调用getClickHandler()函数处理
 chrome.contextMenus.create({
    "title" : "start program",
    "type" : "normal",
     "id": "callapp",
    "contexts" : ["link"],
     "enabled": true,
    "onclick" : getClickHandler()
});
复制代码

程序中nativeHostName需要特殊说明,正是通过该变量,chrome的插件找到调用本地程序的配置
本文的实验环境为windows7,在注册表的HKEY_CURRENT_USER\Software\Google\Chrome\NativeMessagingHosts中创建对应的项,注册表导出内容如下Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Google\Chrome\NativeMessagingHosts\com.ctrip.ops.mysql.callapp]
@="D:\\temp\\chromeExtension\\callapp\\callapp.json"

linux下参考http://match-yang.blog.163.com/blog/static/2109902542014319103739996/

2、浏览器调用配置

callapp.json
该文件的路径保存在注册表的HKEY_CURRENT_USER\Software\Google\Chrome\NativeMessagingHosts\com.ctrip.ops.mysql.callapp项内

复制代码
{
    "name": "com.ctrip.ops.mysql.callapp",
    "description": "Chrome call native app and sent message to app.",
    "path": "C:\\MyApp.exe",
    "type": "stdio",
    "allowed_origins": [
        "chrome-extension://imcfacgnnkhdheiajocckejfmeiokgol/"
    ]
}
复制代码

3、本地应用程序例子

使用C#进行开发,C++参考http://match-yang.blog.163.com/blog/static/2109902542014319103739996/

复制代码
using System;
using System.IO;

namespace ConsoleApplication8
{
    class Program
    {
        static void Main(string[] args)
        {
            log2file("--------------------program start at " + DateTime.Now.ToString() + "--------------------");
            if (args.Length != 0)
            {
                for (int i = 0; i < args.Length; i++)
                    log2file("arg " + i.ToString() + args[i]);

                string chromeMessage = OpenStandardStreamIn();
                log2file("--------------------My application starts with Chrome Extension message: " + chromeMessage + "---------------------------------");
            }
            log2file("--------------------program end at " + DateTime.Now.ToString() + "--------------------");
        }
        static void log2file(string s)
        {
            FileStream fs = new FileStream(@"c:\test.log", FileMode.Append);
            StreamWriter sw = new StreamWriter(fs);
            sw.WriteLine(s);
            sw.Close();
            fs.Close();
        }

        private static string OpenStandardStreamIn()
        {
            //// We need to read first 4 bytes for length information  
            Stream stdin = Console.OpenStandardInput();
            int length = 0;
            byte[] bytes = new byte[4];
            stdin.Read(bytes, 0, 4);
            length = System.BitConverter.ToInt32(bytes, 0);

            string input = "";
            for (int i = 0; i < length; i++)
            {
                input += (char)stdin.ReadByte();
            }

            return input;
        }
    }
}
复制代码

说明:
background.js代码根据如下链接,进行了一些非框架性的修改,主要是注释,不过还是修改了一下author
http://match-yang.blog.163.com/blog/static/2109902542014319103739996/

参考:
讲解如何在浏览器的右键菜单中增加
http://my.oschina.net/ruben/blog/92813
讲解调用本地的应用程序
http://match-yang.blog.163.com/blog/static/2109902542014319103739996/
http://blog.youkuaiyun.com/talking12391239/article/details/38498557#

 

IE 助手是用Visual C++编写的一个能够随Internet Explorer自行启动的插件,它具有以下功能: 1.广告窗口拦截功能 IE 助手会尽可能拦截所有广告窗口,自动把这些窗口的URL地址加入 到黑名单中,黑名单地址弹出窗口会自动关闭。误关闭的窗口再次点击链 接就会打开该窗口,把它加入到白名单中,下一次访问该地址,该窗口 会自动打开。点击链接时按下Shift或者Ctrl 可以用于强制打开一个弹出 窗口。 对于弹出的窗口可以从鼠标右击菜单中选择“加入到黑名单”命令,关 闭该窗口,同时该窗口的地址会被加入到禁止名单,以后用户就再也见不 到该窗口了。除非用户禁止使用IE助手,或者把它从禁止名单中去除。对 于弹出的Flash窗口区域用户可能无法弹出右击菜单,用户可以通过右键点 击页面下边或者页面右边的空白区域弹出右击菜单。 黑名单和白名单中记录可以相互转换,通过转换用户可以自由控制该窗口 是否自动弹出或者关闭。禁止名单中记录除非删除,否则该地址禁止访问, 按下Shift或者Ctrl无效。维护名单时,可以先选中这些记录,然后按下Del键 进行删除。 弹出窗口关闭时有声音提示,用户可以自由定制提示音,也可以使用MIDI或者WAV 文件,为了不影响他人,用户也可以关闭声音提示。 2.IE贴图换肤 允许用户为IE选择一个位图,用于工具栏、菜单栏、地址栏工具条的贴图, 设置完毕下次启动IE方能生效。如果用户在选择位图时选择取消,那么将 取消对IE工具条的贴图换肤。 3.IE修复 能够自动修复主页、起始页、空白页、搜索页被改,恢复正常的桌面图标、 开始菜单,去除开机自动打开浏览器。去除网页对右击菜单的限制和修改,去除 网页对注册表禁用,去除对驱动器图标的隐藏。去除开机自动弹出提示窗口。 能够维护IE的右击菜单和工具菜单项以及工具栏按钮。维护通过注册表实现 自动运行程序。能够重置IE原始配置。 4.IE防火墙 能够拦截恶意网页对注册表的修改,使得恶意网页对注册表的修改无效,注册表 数据只能读不能写。能够自动摘除网页中恶意代码,防止恶意代码读写文件系统, 加载Shell程序。 设置IE属性时必须关闭防火墙或者禁用IE Assistant,否则也无法设置保存IE属性。 为了方便用户使用时,可以通过IE Assistant中的内置的“IE内置属性...”进行设置. 这时设置的结果能够保存.这项功能旨在保护用户的注册表不被修改. 5.注册表的备份和恢复 IE 助手能够在每天第一次启动IE的时候部分备份您的注册表,备份文件大约80KB       左右,下一次启动不再备份。备份文件之能保存7份,七天以前的备份文件会被自动删除。       备份文件可以通过双击导入到注册表中,它可以恢复部分的注册表修改情况(比如主页被改)。       但不一定会解决所有的问题。使用时要把上面3个的功能结合起来使用更好一些。 6.手机短信 IE 助手允许用户发送免费或者收费的手机短信,对于免费免注册手机短信,用户不需       要任何注册,只需要对方手机号码即可发送,没有手机的用户也可以使用。 闪烁功能只对诺基亚手机有效,免提短信仅适用于部分网站。各个网站对发送短信的字数       有限制,所以程序对超长短信进行了处理,把短信分割成几部分多次发送。 7.Web寻呼 IE 助手仅支持国信中文寻呼,没有传呼机照样发免费中文传呼。不需要传呼小姐传话,发送更方便。 8.上网记录清除 IE 助手能够清除上网和用机记录,包括网页记录的密码、Cookie、 IE缓存、网页表单中键入的历史数据(比如Google检索的关键词)、QQ聊天天纪录、开机登录信 息、查找文件和计算机用户信息、使用Office应用程序、RealPlayer、MediaPlayer等 工具留下的记录。清空回收站、临时文件夹,清除NT日志。 9.在线翻译 通过网页右击菜单实现当前网页的英汉互译。 10.在线翻译 通过网页右击菜单实现当前网页的英汉互译。 11.国际传真    允许用户借用网络发送免费国际传真,提供支持国际和地区列表。发送传真就像发送邮件一样容易 12.浏览选项   去除网页对鼠标右键的限制,打开被网页禁止的右键菜单。   禁止网页修改注册表数据,保护注册表不被修改。   记录用户网页提交数据,实现表单数据项的自动填充   对网页中的事件进行处理。   对网络实名进行增强,可以实现在地址栏输入实名后直接进入实名标识的网站,实名查找数据分别来自3721、百度搜索以及CNNIC网络中心。但没有找到实名时会采用用户定义的搜索引擎进行搜索。IE助手允许用户定义自己的实名。             同时它还会把访问过的实名记录到一个XML文件中。下次键入该实名时将不再向上面的三个实名提供商查询,直接检索该文件,把网址定向到查询的结果。该文件可以使用NOTEPAD.exe用UTF8格式打开。   对网页中出现的关键词,用户可以先把它选中,然后右击鼠标,从弹出的菜单中选择          Search KeyWord,将先使用实名查询,找到则跳找到对应的网站,如果没有找到,则使用选定的搜索引擎查询。   13.填表助手   通过拖放操作实现填表,填表项目可以实现即时修改即时生              效,项目内容完全由用户定制。填表项目可以加入到右击菜单中,实现编辑框的的快速填充。   14.网页另存   直接点击右键菜单中的另存为可以快速实现网页的保存。如果选中文本点击“另存为”菜单项,则可以把选中文本快速保存到一个文本文件中.  15.网页阅读   能够以中英文方式阅读网页选中文本和剪贴板中的内容.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值