You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何添加自定义URL协议并绑定到指定端口供浏览器解析?

没问题,我来给你捋清楚怎么实现这个需求——其实自定义URL协议本身是用来唤起本地应用的,不是直接让浏览器解析成带端口的URL,所以得通过中间层来做转换,下面给你几种实用的方案:

方案1:浏览器扩展(最直接,无需修改系统)

这种方式在浏览器内部处理协议转换,不会跳出浏览器,体验最好。以Chrome为例,写个简单的扩展就能搞定:

  1. 创建一个新文件夹,比如MyProtocolRedirect,里面新建两个文件:

manifest.json(扩展配置文件)

{
  "manifest_version": 3,
  "name": "MyProtocol 端口映射工具",
  "version": "1.0",
  "permissions": ["webRequest", "webRequestBlocking"],
  "host_permissions": ["myprotocol://*"],
  "background": {
    "service_worker": "background.js"
  }
}

background.js(核心逻辑脚本)

// 监听自定义协议的请求,直接重定向到带8888端口的URL
chrome.webRequest.onBeforeRequest.addListener(
  function(details) {
    // 把myprotocol://替换成http://,再加上:8888
    const targetUrl = details.url.replace('myprotocol://', 'http://') + ':8888';
    return { redirectUrl: targetUrl };
  },
  { urls: ["myprotocol://*"] },
  ["blocking"]
);
  1. 加载扩展到Chrome:
  • 打开Chrome的扩展页面(地址栏输入chrome://extensions/
  • 开启右上角的「开发者模式」
  • 点击「加载已解压的扩展程序」,选择刚才创建的MyProtocolRedirect文件夹

之后你在地址栏输入myprotocol://website.com,浏览器就会自动跳转到http://website.com:8888了。Firefox的扩展逻辑类似,只是manifest格式和API细节略有不同,你可以参考Firefox的扩展文档调整。

方案2:系统协议注册+本地脚本(跨浏览器生效,但需用户确认)

如果想让所有浏览器都能识别这个协议,就得把myprotocol注册到系统里,然后用本地脚本完成URL转换。

Windows系统操作步骤:

  1. 打开注册表编辑器:按下Win+R,输入regedit回车
  2. 找到HKEY_CLASSES_ROOT,右键新建项,命名为myprotocol
  3. 选中myprotocol项,设置右侧的「默认」值为URL:MyProtocol,然后新建一个字符串值,命名为URL Protocol,值留空
  4. myprotocol下依次新建子项:shellopencommand
  5. 选中command项,设置「默认」值为你的脚本路径,比如:
    "C:\Users\YourName\Documents\myprotocol-redirect.bat" "%1"
    
  6. 创建myprotocol-redirect.bat脚本,内容如下:
    @echo off
    :: 提取myprotocol://后面的部分,加上端口后用浏览器打开
    set "originalUrl=%~1"
    set "targetUrl=http://%originalUrl:myprotocol://=%:8888"
    :: 这里用Chrome打开,也可以换成edge、firefox等
    start chrome "%targetUrl%"
    

设置完成后,当你在任何浏览器里点击或输入myprotocol://website.com,系统会弹出确认框,允许后就会打开对应的带端口URL。

macOS系统操作步骤:

  1. 先创建一个处理URL的shell脚本,比如~/Scripts/myprotocol-redirect.sh,内容如下:
    #!/bin/bash
    original_url="$1"
    # 替换协议并添加端口
    target_url="http://${original_url#myprotocol://}:8888"
    # 用Safari打开,也可以换成chrome
    open -a Safari "$target_url"
    
  2. 给脚本添加执行权限:chmod +x ~/Scripts/myprotocol-redirect.sh
  3. 创建一个plist文件~/Library/LaunchAgents/com.myprotocol.redirector.plist,内容如下:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <key>CFBundleIdentifier</key>
        <string>com.myprotocol.redirector</string>
        <key>CFBundleURLTypes</key>
        <array>
            <dict>
                <key>CFBundleURLName</key>
                <string>MyProtocol</string>
                <key>CFBundleURLSchemes</key>
                <array>
                    <string>myprotocol</string>
                </array>
            </dict>
        </array>
        <key>CFBundleExecutable</key>
        <string>/Users/YourName/Scripts/myprotocol-redirect.sh</string>
    </dict>
    </plist>
    
  4. 注册这个协议处理程序:launchctl load ~/Library/LaunchAgents/com.myprotocol.redirector.plist

之后在浏览器里使用myprotocol://website.com,系统会提示是否允许打开脚本,确认后就会跳转目标URL。

注意事项
  • 自定义协议名称尽量避免和现有协议冲突(比如不要用ftpssh这类已有的)
  • 浏览器对自定义协议有安全限制,系统注册的方式每次都会弹出确认框,这是正常的安全机制
  • 如果你的服务用的是HTTPS,记得把脚本里的http://换成https://

内容的提问来源于stack exchange,提问作者Saurik SI

火山引擎 最新活动