惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

月光博客
月光博客
Martin Fowler
Martin Fowler
Last Week in AI
Last Week in AI
罗磊的独立博客
阮一峰的网络日志
阮一峰的网络日志
博客园 - 【当耐特】
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - 三生石上(FineUI控件)
S
SegmentFault 最新的问题
V
Visual Studio Blog
Hugging Face - Blog
Hugging Face - Blog
雷峰网
雷峰网
博客园_首页
人人都是产品经理
人人都是产品经理
量子位
美团技术团队
The Cloudflare Blog
小众软件
小众软件
WordPress大学
WordPress大学
有赞技术团队
有赞技术团队
M
MIT News - Artificial intelligence
Microsoft Security Blog
Microsoft Security Blog
D
DataBreaches.Net
博客园 - Franky

张鑫旭-鑫空间-鑫生活

1分钟速度了解text-align match-parent声明 « 张鑫旭-鑫空间-鑫生活 光标的形状也能设置了,就是CSS caret-shape属性 « 张鑫旭-鑫空间-鑫生活 pretext与文字四面环绕效果的实现 « 张鑫旭-鑫空间-鑫生活 JSON.rawJSON方法的作用是什么? « 张鑫旭-鑫空间-鑫生活 如何使用CSS判断鼠标从哪个方向进入元素? « 张鑫旭-鑫空间-鑫生活 借助mediabunny纯JS实现视频水印、剪裁、合成等功能 « 张鑫旭-鑫空间-鑫生活 务必谨慎使用JS WeakRef弱引用 « 张鑫旭-鑫空间-鑫生活 CSS六边形头像的实现与蜂巢布局 « 张鑫旭-鑫空间-鑫生活 CSS corner-shape与背景底纹技术 « 张鑫旭-鑫空间-鑫生活 浅学WebTransport API:下一代Web双向通信技术 « 张鑫旭-鑫空间-鑫生活 HTML dialog元素新支持了closedBy属性 « 张鑫旭-鑫空间-鑫生活 HTML interestfor属性与悬停popover交互效果 « 张鑫旭-鑫空间-鑫生活 CSS3模拟window7炫酷界面效果展示 « 张鑫旭-鑫空间-鑫生活 图片旋转+剪裁js插件(兼容各浏览器) « 张鑫旭-鑫空间-鑫生活 纯js无图片无外链CSS图片幻灯片播放插件 « 张鑫旭-鑫空间-鑫生活 CSS border三角、圆角图形生成技术简介 « 张鑫旭-鑫空间-鑫生活 CSS “渐进增强”在web制作中常见应用举例 « 张鑫旭-鑫空间-鑫生活 让IE6/IE7/IE8浏览器支持CSS3属性 « 张鑫旭-鑫空间-鑫生活 jQuery – 高亮动态显示页面HTML代码插件 « 张鑫旭-鑫空间-鑫生活 翻译 – 逐渐消失的Flash网站 « 张鑫旭-鑫空间-鑫生活 CSS reset的重新审视 – 避免样式重置 « 张鑫旭-鑫空间-鑫生活 新浪微博插入话题后部分文字选中的js实现 « 张鑫旭-鑫空间-鑫生活 JavaScript实现http地址自动检测并添加URL链接 « 张鑫旭-鑫空间-鑫生活 CSS实现兼容性的渐变背景(gradient)效果 « 张鑫旭-鑫空间-鑫生活 CSS content内容生成技术以及应用 « 张鑫旭-鑫空间-鑫生活 CSS gradient渐变之webkit核心浏览器下的使用 « 张鑫旭-鑫空间-鑫生活 CSS渐变之CSS3 gradient在Firefox3.6下的使用 « 张鑫旭-鑫空间-鑫生活 区分IE8/IE7/IE6及其他浏览器-CSS “\9″hack « 张鑫旭-鑫空间-鑫生活 CSS实现跨浏览器兼容性的盒阴影效果 « 张鑫旭-鑫空间-鑫生活 CSS3&HTML5各浏览器支持情况一览表 « 张鑫旭-鑫空间-鑫生活
一言难尽的registerProtocolHandler()方法 « 张鑫旭-鑫空间-...
张鑫旭,zhangxinxu · 2023-08-30 · via 张鑫旭-鑫空间-鑫生活

by zhangxinxu from https://www.zhangxinxu.com/wordpress/?p=10969 鑫空间-鑫生活
本文欢迎分享与聚合,全文转载就不必了,尊重版权,圈子就这么大,若急用可以联系授权。

猫 日 封面

一、前事不忘后事之师

第一眼看到registerProtocolHandler()方法的时候,说实话,我还是挺兴奋的。

这可是个有趣的东西啊,居然可以自定义协议地址,并且可以像正常链接一样访问。

试想下,有个链接地址是:

<a href="web+zxx:css">CSS标签</a>

点击后,可以自动访问CSS标签页面,是不是很帅气?

又是装逼于无形的一大利器啊,哈哈哈。

装逼

可是,当我深入体验这个API之后……嗯……怎么说呢……唉,只能说一言难尽,具体什么情况,听我慢慢道来。

二、鸟来还语法,客去更安禅

registerProtocolHandler的使用分为注册和使用两部分。

首先是注册。

所有自定义的协议头,一定要是web+开头,后面至少跟随一个英文字母(不能有数字,否则会报错)。

否则只能使用下面之一的协议。

  • bitcoin
  • ftp
  • ftps
  • geo
  • im
  • irc
  • ircs
  • magnet
  • mailto
  • matrix
  • mms
  • news
  • nntp
  • openpgp4fpr
  • sftp
  • sip
  • sms
  • smsto
  • ssh
  • tel
  • urn
  • webcal
  • wtai
  • xmpp

而上面很多协议,浏览器是内置原生行为的,例如tel、mailto、ftps等,看起来是不能随便定义的,否则有可能会冲突。

所以,先使用完全自定义的协议看看。

代码如下(注意,后面的地址不能跨域,否则也会报错):

navigator.registerProtocolHandler('web+zxx', 'https://www.zhangxinxu.com/wordpress?s=%s');

我一开始以为是这样的,%s表示使用时候协议冒号后面的变量,所以如果有链接:

<a href="web+zxx:css">CSS标签</a>

点击后,访问的URL是 https://www.zhangxinxu.com/wordpress?s=css。

然而,真正运行后,大跌眼镜。

首先是权限提示,选择允许。

允许

在Windows Chrome下,还会呼起系统窗口,让你选择呼起的本地软件。

Firefox浏览器则是自带的提示,选择“选择应用程序”后,再选择最上面的当前域名的这个选项即可。

Firefox下的提示

此时,假设页面中有个链接元素的href的属性值是web+zxx:css。

则点击后浏览器的调整地址是……这个:

搜索地址演示

完全超出预期,%s指代的居然是完整的href属性值,而不是协议后面的值。

眼见为实,大家也可以来体验体验,狠狠地点击这里:registerProtocolHandler注册使用示意demo

这就导致,registerProtocolHandler要想应用,一定要对动态数据进行额外的处理。

例如对URL中的查询关键字进行字符处理,得到冒号后面的’css’关键字。

new URLSearchParams(location.search).get('s').replace('web+zxx:', '');

这可就麻烦了呀,看来这玩意,只能用在呼起本地程序上,直接在Web上装逼耍帅完全不可行。

叹气

一个字,失败!

三、天河渐分晓,结语问牛郎

伤心欲绝,内置的scheme类型我也懒得测试了,估计也是一个尿性。

总而言之,言而总之,registerProtocolHandler()方法想要在纯Web中玩耍是非常不方便的,也是没有任何意义的。

非要和本地的应用程序结合起来使用才有价值。

由此可见,registerProtocolHandler()方法就是个鸡肋方法,我估计我这辈子都没机会使用了。

也不知道,一个URL呼起vscode或者github桌面端软件是不是基于此方法实现的。

嗯,我回想了下我之前学到的知识……应该不是,应该是这些软件在安装的时候,直接在系统内注册好了的。

路径是,桌面软件注册,浏览器URL呼起。

而registerProtocolHandler()方法是浏览器注册,浏览器呼起。

这么一看,registerProtocolHandler()方法更是注定了无人问津。

好了,白开心一场,下篇文章再见吧。

? ? ? ? ? ? ?

本文为原创文章,欢迎分享,勿全文转载,如果实在喜欢,可收藏,永不过期,且会及时更新知识点及修正错误,阅读体验也更好。
本文地址:https://www.zhangxinxu.com/wordpress/?p=10969

(本篇完)