1. 问题描述
web项目中,有一个小功能是点击链接,需要外调外部的一个exe,然后就通过UrlProtocol的方式处理。早期版本的浏览器还有,2024.10刚好浏览器发布了130版本,突然发现传参的附件路径失效了。
对比了下发现是新版浏览器,传参时候,把绝对路径的盘符冒号去掉了。(可以看下面2个截图)
代码块:
<a class="video-trans-tips" href="[S2WProtocol://C:/Windows/transSilk2Wav-test.mp4](S2WProtocol://C:/Windows/transSilk2Wav-test.mp4)
">点击调用播放器播放</a>

旧版本浏览器

edge130版本
2. 问题分析
测试了很多的很多种路径方式(测试代码见后面),发现S2WProtocol是个协议名称,相当于http,所以后面的S2WProtocol:\\格式也需要遵守链接规范。(在浏览器地址栏输入http://C:aaa/bbb,会发现盘符冒号也是丢失的。)

各种路径方式的情况:
3. 解决方案
既然要遵守链接规则,那就和普通链接一样通过查询参数方式带入参数。
S2WProtocol://动作名?参数key=参数value
举例:
S2WProtocol://play?path=C:aa/bbb.mp4
这种方式下,exe应用程序接受到的参数是S2WProtocol://play/?path=C:aa/bbb.mp4,会在问号?前面多一个正斜杆/,原因未知。exe开发同事需要关注这点。
测试代码:
<html>
<head></head>
<body>
<a href="S2WProtocol://C:/Windows/transSilk2Wav-test.mp4">S2WProtocol://C:/Windows/transSilk2Wav-test.mp4</a>
<p>旧版本控制台打印:Launched external handler for 's2wprotocol://C:/Windows/transSilk2Wav-test.mp4'。能识别。</p>
<p>新版本控制台打印:Launched external handler for 's2wprotocol://C/Windows/transSilk2Wav-test.mp4'。丢失盘符冒号。</p>
<hr>
<a href="S2WProtocol://transSilk2Wav-test.mp4">S2WProtocol://transSilk2Wav-test.mp4</a>
<p>新旧版本都识别不了该路径</p>
<hr>
<a href="S2WProtocol://C:\Windows\transSilk2Wav-test.mp4">S2WProtocol://C:\Windows\transSilk2Wav-test.mp4</a>
<p>旧版本能识别;新版本会跳转到“about:blank#blocked”</p>
<hr>
<a href="S2WProtocol://C:\\Windows\\transSilk2Wav-test.mp4">S2WProtocol://C:\\Windows\\transSilk2Wav-test.mp4</a>
<p>旧版本能识别;新版本会跳转到“about:blank#blocked”</p>
<hr>
<a href="S2WProtocol://C://Windows//transSilk2Wav-test.mp4">S2WProtocol://C://Windows//transSilk2Wav-test.mp4</a>
<p>旧版本能识别;新版本会丢失盘符冒号</p>
<hr>
<a href="S2WProtocol:C:/Windows/transSilk2Wav-test.mp4">S2WProtocol:C:/Windows/transSilk2Wav-test.mp4</a>
<p>去掉S2WProtocol:后面的双斜杆之后,新版本就不会丢失盘符冒号了。</p>
<hr>
<a href="S2WProtocol:C:/Windows//D:transSilk2Wav-test.mp4">S2WProtocol:C:/Windows//D:transSilk2Wav-test.mp4</a>
<p>在后面字符串拆入盘符冒号,新版本不会丢失盘符冒号。</p>
<hr>
<a href="S2WProtocol:///C:/Windows/transSilk2Wav-test.mp4">S2WProtocol:///C:/Windows/transSilk2Wav-test.mp4</a>
<p>S2WProtocol:后面是三个正斜杆,新版本也不会丢失盘符冒号。</p>
<hr>
<a href="S2WProtocol://play?path=C:/Windows/transSilk2Wav-test.mp4">S2WProtocol://play?path=C:/Windows/transSilk2Wav-test.mp4</a>
<p>做成这种链接方式的可以~</p>
<hr>
<a href="S2WProtocol://path=C:/Windows/transSilk2Wav-test.mp4">S2WProtocol://path=C:/Windows/transSilk2Wav-test.mp4</a>
<p>新版本会丢失盘符冒号</p>
</body>
</html>