1. 問題描述
web項(xiàng)目中,有一個(gè)小功能是點(diǎn)擊鏈接,需要外調(diào)外部的一個(gè)exe,然后就通過UrlProtocol的方式處理。早期版本的瀏覽器還有,2024.10剛好瀏覽器發(fā)布了130版本,突然發(fā)現(xiàn)傳參的附件路徑失效了。
對(duì)比了下發(fā)現(xiàn)是新版瀏覽器,傳參時(shí)候,把絕對(duì)路徑的盤符冒號(hào)去掉了。(可以看下面2個(gè)截圖)
代碼塊:
<a class="video-trans-tips" href="[S2WProtocol://C:/Windows/transSilk2Wav-test.mp4](S2WProtocol://C:/Windows/transSilk2Wav-test.mp4)
">點(diǎn)擊調(diào)用播放器播放</a>

舊版本瀏覽器

edge130版本
2. 問題分析
測(cè)試了很多的很多種路徑方式(測(cè)試代碼見后面),發(fā)現(xiàn)S2WProtocol是個(gè)協(xié)議名稱,相當(dāng)于http,所以后面的S2WProtocol:\\格式也需要遵守鏈接規(guī)范。(在瀏覽器地址欄輸入http://C:aaa/bbb,會(huì)發(fā)現(xiàn)盤符冒號(hào)也是丟失的。)

各種路徑方式的情況:
3. 解決方案
既然要遵守鏈接規(guī)則,那就和普通鏈接一樣通過查詢參數(shù)方式帶入?yún)?shù)。
S2WProtocol://動(dòng)作名?參數(shù)key=參數(shù)value
舉例:
S2WProtocol://play?path=C:aa/bbb.mp4
這種方式下,exe應(yīng)用程序接受到的參數(shù)是S2WProtocol://play/?path=C:aa/bbb.mp4,會(huì)在問號(hào)?前面多一個(gè)正斜桿/,原因未知。exe開發(fā)同事需要關(guān)注這點(diǎn)。
測(cè)試代碼:
<html>
<head></head>
<body>
<a href="S2WProtocol://C:/Windows/transSilk2Wav-test.mp4">S2WProtocol://C:/Windows/transSilk2Wav-test.mp4</a>
<p>舊版本控制臺(tái)打印:Launched external handler for 's2wprotocol://C:/Windows/transSilk2Wav-test.mp4'。能識(shí)別。</p>
<p>新版本控制臺(tái)打?。篖aunched external handler for 's2wprotocol://C/Windows/transSilk2Wav-test.mp4'。丟失盤符冒號(hào)。</p>
<hr>
<a href="S2WProtocol://transSilk2Wav-test.mp4">S2WProtocol://transSilk2Wav-test.mp4</a>
<p>新舊版本都識(shí)別不了該路徑</p>
<hr>
<a href="S2WProtocol://C:\Windows\transSilk2Wav-test.mp4">S2WProtocol://C:\Windows\transSilk2Wav-test.mp4</a>
<p>舊版本能識(shí)別;新版本會(huì)跳轉(zhuǎn)到“about:blank#blocked”</p>
<hr>
<a href="S2WProtocol://C:\\Windows\\transSilk2Wav-test.mp4">S2WProtocol://C:\\Windows\\transSilk2Wav-test.mp4</a>
<p>舊版本能識(shí)別;新版本會(huì)跳轉(zhuǎn)到“about:blank#blocked”</p>
<hr>
<a href="S2WProtocol://C://Windows//transSilk2Wav-test.mp4">S2WProtocol://C://Windows//transSilk2Wav-test.mp4</a>
<p>舊版本能識(shí)別;新版本會(huì)丟失盤符冒號(hào)</p>
<hr>
<a href="S2WProtocol:C:/Windows/transSilk2Wav-test.mp4">S2WProtocol:C:/Windows/transSilk2Wav-test.mp4</a>
<p>去掉S2WProtocol:后面的雙斜桿之后,新版本就不會(huì)丟失盤符冒號(hào)了。</p>
<hr>
<a href="S2WProtocol:C:/Windows//D:transSilk2Wav-test.mp4">S2WProtocol:C:/Windows//D:transSilk2Wav-test.mp4</a>
<p>在后面字符串拆入盤符冒號(hào),新版本不會(huì)丟失盤符冒號(hào)。</p>
<hr>
<a href="S2WProtocol:///C:/Windows/transSilk2Wav-test.mp4">S2WProtocol:///C:/Windows/transSilk2Wav-test.mp4</a>
<p>S2WProtocol:后面是三個(gè)正斜桿,新版本也不會(huì)丟失盤符冒號(hào)。</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>新版本會(huì)丟失盤符冒號(hào)</p>
</body>
</html>