Chrome 插件开发与本地程序交互流程
一、 将本地程序写入注册表
可以采用bat的方式写入注册表
REG ADD “HKCU\Software\Google\Chrome\NativeMessagingHosts\com.google.chrome.example.echo” /ve /t REG_SZ /d “%~dp0com.google.chrome.example.echo-win.json” /

只需要改动此处的json文件即可,其中该json文件与bat文件 在同级目录
该json格式如下:

其中name名称 为写入注册表的名称 allowed_origins 为注册进谷歌浏览器的插件id
Path:为需要调用进行交互的本地应用程序路径

二、 注册插件到谷歌浏览器
在谷歌浏览器地址栏中输入chrome://extensions/ 进入插件管理界面

点击加载已解压的扩展程序

选择manifest.json文件所处的目录 (浏览器默认加载manifest.json文件)

其中manifest.json为配置文件
内容如下:

这些参数不可缺少,参数含义:
{
// Required
“manifest_version”: 2, // manifest编写规范版本,目前主流2
“name”: “My Extension”, // 插件名
“version”: “versionString”, // 版本号

 // Recommended"default_locale": "en",                        // 默认编码"description": "A plain text description",     // 插件描述"icons": {                                    // 插件下载或浏览时显示的图标,可选多种规格,建议128"16": "icon16.png","48": "icon48.png","128": "icon128.png"},// Pick one (or none)"browser_action": {},                        // 图标显示在地址栏右边,能在所有页面显示"page_action": {},                            // 图标显示在地址栏右侧(地址栏内),只在特定页面显示// Optional"author": "",                                // 插件作者"automation": true,                            // 开启自动化"background": {                                // 可常驻浏览器后台的脚本,可以连接其他页面// Recommended"persistent": false,"script": ["background.js"]},"background_page": ,"chrome_settings_overrides": {},            // 覆盖当前的chrome配置"chrome_ui_overrides": {                    // 覆盖当前的chrome界面配置"bookmarks_ui": {"remove_bookmark_shortcut": true,"remove_button": true}},"chrome_url_overrides": {                    // 修改点击相应动作时返回的页面链接,只支持bookmarks、history、newtab三个页面"bookmarks": "myPage.html","history": "myPage.html","newtab": "myPage.html"},"commands": {                                // 键盘触发插件快捷键"_execute_browser_action": {"suggested_key": {"windows": "Ctrl+Shift+Y","mac": "Command+Shift+Y","chromeos": "Ctrl+Shift+U","linux": "Ctrl+Shift+J"}},},"content_capabilities": {                                                // 页面权限"matches": ["https://*.nyc.corp.google.com/*"],"permissions": ["unlimitedStorage", "notifications"] },"content_scripts": [{                                                    // 可以操作页面元素,不能使用chrome的api"matches": ["http://www.google.com/*"],"css": ["mystyles.css"],"js": ["jquery.js", "myscript.js"]}],"content_security_policy": "script-src ‘self‘; object-src ‘self‘",        // 安全策略,默认情况下禁止使用eval或者Function构造函数,以及内联js,禁止载入外部脚本"converted_from_user_script": true,                                        // 将用户脚本转化为content script,允许使用GM_* (greasemonkey)方法"copresence": ,"current_locale": ,"devtools_page": "devtools.html",                                        // 在开发中工具中的页面"event_rules": [{                                                        // 事件监听规则及条件"event": "declarativeContent.onPageChanged","actions": [{"type": "declarativeContent.ShowPageAction"}],"conditions": [{"type": "declarativeContent.PageStateMatcher","css": ["video"]}]}],"externally_connectable": {                                                // 哪些外部扩展、应用或网页能连接此插件"ids": ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb","*"                                                                // 允许所有可使用 "*"],"matches": ["*://*.example.com/*"],"accepts_tls_channel_id": false},"file_browser_handlers": [{                                                // 允许用户上传文件,只支持Chrome OS"id": "upload","default_title": "Save to Gallery",                                 // 按钮文字"file_filters": ["filesystem:*.jpg",                                             // 匹配所有文件可用 "filesystem:*.*""filesystem:*.jpeg","filesystem:*.png"]}],"file_system_provider_capabilities": {                                    // 允许访问文件系统,只支持Chrome OS"configurable": true,"multiple_mounts": true,"source": "network"},"homepage_url": "http://path/to/homepage",                                // 插件主页,显示在chrome扩展工具列表中"export": {                                                                // 允许其他组件调用自己的模块"whitelist": ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"]},"import": [{"id": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}],                    // 调用其他组件的模块,与其他组件的export属性共用"incognito": "spanning or split or not_allowed",                        // 隐身模式"input_components": [                                                    // 输入管理,键盘事件等{"name": "Test IME","type": "ime","id": "test","description": "Test IME",                                        // A user visible description"language": "en-US",                                            // The primary language this IME is used for"layouts": ["us::eng"]                                            // The supported keyboard layouts for this IME}],"key": "publicKey",                                                        // 自动生成,可不需要"minimum_chrome_version": "versionString",                                // 要求支持的chrome的最低版本"nacl_modules": [{                                                        // 使用native client 模块"path": "OpenOfficeViewer.nmf","mime_type": "application/vnd.oasis.opendocument.spreadsheet"}],"oauth2": ,                                                                // 谷歌账户相关信息"offline_enabled": true,                                                // 离线使用"omnibox": {                                                            // 搜索关键词推荐"keyword": "aString"},"optional_permissions": ["tabs"],                                        // 运行时权限,非必须权限"options_page": "options.html",                                            // 设置页,可从扩展工具列表进入"options_ui": {                                                            // 设置页"chrome_style": true,"page": "options.html"},"permissions": ["tabs"],                                                // 安装时提示的权限,基本权限"platforms": ,                                                            // 可以将部分基于平台的功能文件放入_platform_specific目录然后列在此项中减少插件体积"plugins": [{ "path": "extension_plugin.dll" }],                        // NPAPI插件"requirements": {                                                        // 安装前置需求"3D": {"features": ["webgl"]}},"sandbox": [                                                            // 放入沙盒中运行{"pages": ["page1.html","directory/page2.html"],// content_security_policy is optional."content_security_policy": "sandbox allow-scripts; script-src https://www.google.com"}],"short_name": "Short Name",                                                // 短名称,最长12个字母,如不设置则用name属性代替"signature": ,"spellcheck": ,                                                            // 拼写检查"storage": {                                                            // 描述了各种属性的type,json格式文件,能在storage.managed API中调用"managed_schema": "schema.json"},"system_indicator": ,                                                    // 实验性API,只在开发版中实现,已弃用"tts_engine": {                                                            // text to speech"voices": [{"voice_name": "Alice","lang": "en-US","gender": "female","event_types": ["start", "marker", "end"]},{"voice_name": "Pat","lang": "en-US","event_types": ["end"]}]},                                                        "update_url": "http://myhost.com/mytestextension/updates.xml",            // 插件更新地址"version_name": "aString",                                                // 版本名,和version字段的区别是没有格式要求,任意字符串"web_accessible_resources": ["images/*.png"]                            // 指定本扩展在注入的目标页面上所需使用的资源的路径

}

其中扩展程序的路径文件 需要是在本地路径下的html文件才可以用
Port =chrome.runtime.connectNative(hostName);// hostname为注册到本地的文件名
然后 发消息通过这种方式
message = {“text”: document.getElementById(‘input-text’).value};
port.postMessage(message);

Chrome 插件开发与本地程序交互流程相关推荐

  1. chromium 37 chrome Native messaging 本地消息机制

    01 chrome Native messaging Native messaging 扩展解决chrome与本地程序通信的问题,可以解决从浏览器启动二进制文件的问题. 是通过扩展为browser进程 ...

  2. html打开浏览器协议,通过私有协议在Chrome浏览器网页中打开本地程序

    最近甲方有这样一个需求:两套系统,一套基于Chrome开发,一套基于IE开发,想要在Chrome中增加一个链接,然后进入IE开发的系统.也就是说,想要在Chrome中创建链接跳转到IE浏览器指定页面, ...

  3. 西安天气html5插件,Chrome 插件开发——本地天气

    经常在Chrome应用商店下载扩展程序也就是插件,有时候在想可不可以自己也开发一个插件用用呢?本文就是在这样的背景下产生的,以一个生活必需的简单获取天气的插件作为开发演示,下面就开始我们的Chrome ...

  4. Chrome插件开发实例---刷论坛在线时间小程序

    前记: 由于近日注册了某个技术论坛,其论坛要求转为正式会员必须50积分购买邀请号,回答官方预留的题目可以获得30积分,每日在线一小时可以获得1积分上限为5积分.本人回答了官方题目获得30积分,之后就只 ...

  5. vue.js 初体验— Chrome 插件开发实录

    欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 作者:陈纬杰 背景 对于经常和动画开发打交道的开发者对于Animate.css这个动画库不会陌生,它把一些常见 ...

  6. 【Chrome插件开发】ReRes和request-interceptor源码赏析+复现+插件开发完整解决方案

    文章目录 引言 亮点 Chrome插件ReRes源码赏析 Chrome插件request-interceptor background.js源码赏析 技术选型 配置stylelint vscode配置 ...

  7. chrome插件开发(转)

    作者原文:https://www.cnblogs.com/liuxianan/p/chrome-plugin-develop.html 写在前面 我花了将近一个多月的时间断断续续写下这篇博文,并精心写 ...

  8. 深入浅出 Redis client/server交互流程

    2019独角兽企业重金招聘Python工程师标准>>> 最近笔者阅读并研究redis源码,在redis客户端与服务器端交互这个内容点上,需要参考网上一些文章,但是遗憾的是发现大部分文 ...

  9. SAP UI5 应用开发教程之三十八 - 使用 Chrome 开发者工具查看程序执行出错时的上下文信息

    一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...

最新文章

  1. win8下Python学习——搭建web.py框架
  2. 的源码管理器中有感叹图标_玄说前端面试层层解析—关于 redux 的源码
  3. 聚类算法_案例实战:聚类实战
  4. @ImportResource和@PropertySource两个注解的区别
  5. PCB制作仿真、自制51板测试及性能改进
  6. 物联网(IOT)之常见物联网通信技术概览-有线篇
  7. VXLAN技术学习笔记
  8. 「数字电路系列」博文目录,学习总结
  9. 魔兽世界mysql闪退_魔兽世界怀旧服闪退怎么办
  10. 判断设备访问类型是PC端还是WAP端
  11. 应急管理大屏可视化决策系统产品白皮书
  12. 修改若依微服务版遇到的的问题
  13. 计量经济学计算机输出结果,计量经济学作业结果解析A.doc
  14. 超详细的Storyboard的解析——Objective-C(IOS)
  15. 谈谈市面上无线路由器的性能和芯片
  16. CSS—移动端适配方案flexible.js
  17. 阿里P8架构师20年经验总结成微服务设计企业架构转型之道笔记
  18. 图神经网络(Graph Neural Networks)
  19. kali双系统安装(超详细)
  20. Flash ActionScript 3.0 动画高级教程 (高清PDF中文版下载)

热门文章

  1. Java多线程学习九:怎样确定线程数量及CPU 核心数和线程数的关系||如何定制自己的线程池
  2. 12最后一个正式版_玩机体验:iOS14.3正式版更新了哪些内容,是否值得升级?
  3. '=='和equals区别以及jvm内存分配
  4. 【6.18校内test】T1多项式输出
  5. 爬虫—Requests高级用法
  6. 由系统调用想起的。。。
  7. 模拟赛 10-14考试再次翻车记
  8. [one day one question] GIF动画为什么只动一次不能循环
  9. 我的学习之路_第十四章_反射
  10. C#将另一个应用程序的窗口移动到前端的问题