自定义外部协议使浏览器拉起本地程序

什么是自定义协议

由于我们的游戏需要在浏览器中调用NPAPI插件,而chrome移除了NPAPI的支持,导致游戏并不能很好的适配所有的浏览器,所以这个时候我们对于chrome浏览器用到了自定义浏览器协议这一标准。自定义浏览器协议允许在浏览器中使用protocol://url的形式进行调用本地程序。包括在网页上拉起百度云网盘、或者拉起QQ等等等等,都属于自定义浏览器协议。

原理分析

在通过浏览器调用外部程序时,浏览器会在我们本地的注册表中查找协议所对应的注册表,并获取实际要调用的程序路径进行调用。

例:xy://callback/?id=opaqueInternalAccesssObj

xy://为我们自定义的浏览器协议,后面的callback/?id=opaqueInternalAccessObj则为实际传入的参数(如果需要的话)

注册表解析

Windows Registry Editor Version 5.00[HKEY_CLASSES_ROOT\xy]
@="GameLoader Plugin"
"URL Protocol"="C:\\Windows\\System32\\cmd.exe"[HKEY_CLASSES_ROOT\xy\shell][HKEY_CLASSES_ROOT\xy\shell\open][HKEY_CLASSES_ROOT\xy\shell\open\command]
@="C:\\Windows\\System32\\cmd.exe \"%1\""

保存成xy.reg,双击运行后在浏览器中输入xy://后会提示是否打开GameLoader Plugin(实则是打开Windows Shell)。

  1. [HKEY_CLASSES_ROOT] 是应用程序运行时必须的信息,[HKEY_CLASSES_ROOT\xy]表示在该注册表目录下生成了一个xy的应用程序运行时必须的信息。@=为该应用程序默认名称,用来显示程序名称,不填则为exe名称, URL Protocol=为该协议所要调用的程序地址。

  2. [HKEY_CLASSES_ROOT\xy\shell]在xy\下生成shell目录。

  3. [HKEY_CLASSES_ROOT\xy\shell\open]在xy\shell\下生成open目录

  4. [HKEY_CLASSES_ROOT\xy\shell\open\command]在xy\shell\open\下生成command目录,@=在command目录下新建一个默认值为协议调用程序的实际路径。

自定义协议的坑

我们的游戏客户端注册表一开始没有在[HKEY_CLASSES_ROOT\xy]下写入"URL Protocol=(path...)"的注册信息,导致在chrome v74及以上浏览器中无法拉起外部程序,而在v74以下则可以拉起。遇到这个问题时,起初我怀疑是chrome在更新后移除掉这个功能,于是从v68版本看到了v74版本的移除功能说明文档后,发现该功能未更新也未移除。于是我困惑的想到去下个chrome v74版本来进行测试,打开百度云地址,点击下载,发现百度云网盘能拉起客户端,于是f12查看百度云所调用的地址baiduyunguanjia://xxxxxxx,卧槽?

遂进入regedit.exe中进行查看,默默的比对百度云与我们的注册表有何不同,查看到根目录时发现百度云多了个URL Protocol,于是在我们的注册表上加上后,chrome v74版本及以上的都可以调用外部程序了,所以不管在新版还是旧版的浏览器中,注册表中在根目录一定要加上URL Protocol的路径,以确保能正常拉起本地程序。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/431983.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

hssfcolor 不建议使用_不建议使用微信双开的真正原因!

不少小伙伴都有两个甚至多个微信号,通常一个是自己的私人号,其它则用于工作,所以想要在手机中双开微信,这样使用起来更方便。不过使用 iPhone 的小伙伴就很郁闷了,为什么在 iPhone 上不能像部分安卓手机那样方便的双开…

【转】如何用css限制文字长度,使溢出的内容用省略号…显示

文章转自这里(现在貌似被黑了,建议不要点击了) ps:因在该地方没看到转载按钮,复制下存到这里以待自己方便,别人能看到帮助一下更是乐意之至,效果亲测可以实现,兼容IE、谷歌、火狐 由于文字内容长度的不确定…

yytextview多种格式_iOS YYText的使用笔记一(YYTextView图文编辑器)

YYText是强大的YYKit的一部分可以单独下载Powerful text framework for iOS to display and edit rich text. (Its a component ofYYKit)集成的时候建议使用cocopod管理1.里面主要两个控件:YYTextView 和 YYLabel现在主要是YYTextview的简单使用YYText主要是NSMutab…

React Canvas:高性能渲染 React 组

React Canvas 提供了使用 Canvas 渲染移动 Web App 界面的能力,替代传统的 DOM 渲染,具有更接近 Native App 的使用体验。React Canvas 提供了一组标准的 React 组件,由基于的渲染元素抽象而成。 GitHub 源码下载 示例代码: …

移除集合效率高还是add高_List、set集合接口分析

一、List接口详解1、List接口有三个实现类,ArrayList、LinkedList、Vector2、三个实现类的异同点:(1)ArrayList: 作为list接口的主要实现类;线程不安全,效率高;底层使用Object[]存储&#xff08…

代码实践

闭包举例: function closure(){var innerVariable inner;function innerFn(){ return innerVariable;}return innerFn(); } var innerVariable defined in outer; var outerVariable closure(); console.log(outerVariable); 测试字符串是否回文: …

python 读取excel太慢_Python 读取excel并转换为字典

方法一:利用利用xlrd读取excel文件其实整个过程比较简单,利用xlrd读取excel文件,再把读取到的数据转换为dict即可。1.安装 xlrdpip install xlrd2.读取文件,并进行格式转换导入的excel表格的格式是这样的:解析后的格式…

windows上编译zlib-1.2.8

MSVC编译 使用VS(x86)命令行工具进入到zlib根目录,执行 nmake -f win32/Makefile.msc ,在根目录下生成:zlib.lib(静态库) zdll.lib(动态库的导入库) zlib1.dll(动态库) 。必要的头文件有zlib.h和zconf.h 默认生成的是release版的…

大表与大表join数据倾斜_技术分享|大数据技术初探之Spark数据倾斜调优

侯亚南数据技术处支宸啸数据技术处在大数据计算中,我们可能会遇到一个很棘手的问题——数据倾斜,此时spark任务的性能会比预期要差很多:绝大多数task都很快执行完成,但个别task执行极慢或者报OOM(内存溢出)。数据倾斜调优&#xf…

NYOJ 289 苹果(01背包)

苹果 时间限制:3000 ms | 内存限制:65535 KB难度:3描述ctest有n个苹果,要将它放入容量为v的背包。给出第i个苹果的大小和价钱,求出能放入背包的苹果的总价钱最大值。 输入有多组测试数据,每组测试数据第一…

磁盘剩余空间策略_MySQL磁盘消耗迅猛掌握这点就够了,包你事半功倍

Part1:写在最前当一张单表10亿数据量的表放在你面前,你将面临着什么?Part2:背景介绍为了提升数据库资源利用率,一个实例中,在不互相影响,保证业务高效的前提下,我们会将同一个大业务下的不同小业务放在一个…

Date Picker控件:

Date Picker控件: 中文:日期/时间选取器UIDatePicker有一个实例方法setDate:animated,以编程的方式选择日期。UIDatePicker有四种模式(model):Time(只选时间)Date(只选日…

logback日志pattern_@Slf4j 实现日志输入到外部文件

添加一个配置文件\src\main\resources\logback-spring.xml<?xml version"1.0" encoding"UTF-8"?><configuration scan"true" scanPeriod"10 seconds"> <contextName>logbackcontextName> <prope…

C++ Prime:sizeof运算符

sizeof运算符的结果部分地依赖于其作用的类型&#xff1a; 对char或者类型为char的表达式执行sizeof运算结果得1&#xff1b; 对引用类型执行sizeof运算得到被引用对象所占空间的大小&#xff1b; 对指针执行sizeof运算得到指针本身所占空间的大小&#xff1b; 对解引用指针执行…

前驱和后驱什么意思_为什么只有豪车才敢用后驱

为什么只有豪车才敢用后驱https://www.zhihu.com/video/1156959599864147968一般的家用车&#xff0c;基本上都是前驱为主&#xff0c;前驱够用&#xff0c;成本还低。但前驱满足不了豪华车的运动需求&#xff0c;所以豪华车后驱才是王道。有人这个时候肯定要跳出来不服了&…

leetcode 第五题 Longest Palindromic Substring (java)

Longest Palindromic Substring Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring. time255ms accepted 暴力遍历 public String longes…

思科光传输功率查询_常见的6款40G QSFP+光模块型号介绍及应用

近些年来&#xff0c;云计算和大数据在我国兴起一股热潮&#xff0c;为了提供足够的带宽&#xff0c;许多接入交换机已经发展到可以连接40G以太网的核心交换机。互连数据传输的快速发展&#xff0c;离不开40G光模块&#xff0c;因为它可以提供足够的带宽&#xff0c;以确保数据…

sigquit信号默认忽略吗_老妹儿,你真的搞懂了 Shell 信号吗?

作者&#xff1a;李振良OK链接&#xff1a;https://blog.51cto.com/lizhenliang/1899347哈喽&#xff0c;各位新来的小伙伴们&#xff0c;大家好&#xff01;由于公众号做了改版&#xff0c;为了保证公众号的资源能准时推送到你手里&#xff0c;大家记得将咱们的公众号 加星标置…

wget 命令用法详解

wget是在Linux下开发的开放源代码的软件&#xff0c;作者是Hrvoje Niksic&#xff0c;后来被移植到包括Windows在内的各个平台上。它有以下功能和特点&#xff1a; &#xff08;1&#xff09;支持断点下传功能&#xff1b;这一点&#xff0c;也是网络蚂蚁和FlashGet当年最大的卖…

datetimepicker不可以选择当天之前_专访吴京:网上《战狼3》的消息我都不知道,大家可以选择不信...

搜狐娱乐讯 (哈麦/文)在2017爆火的《战狼2》之后&#xff0c;吴京演了《祖宗十九代》《流浪地球》《老师好》《银河补习班》《攀登者》《我和我的祖国》《我和我的家乡》《金刚川》八部电影&#xff0c;但是计划中的《战狼3》一直没有动静。不过&#xff0c;关于《战狼3》&…