You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows 10自定义协议JS调用失败,其他方式正常的问题求助

问题解决方案

问题1:JavaScript调用自定义协议失败

Fetch API 仅支持 HTTP/HTTPS/WSS 等标准网络协议,完全不支持自定义URL协议,所以用fetch调用fdmyalbsif:会直接报错。

正确的JavaScript调用方式有两种:

方法1:直接修改window.location.href

function Save_Result() {
  // 参数格式:协议名://参数集合(无需额外加引号,后续在批处理中解析)
  const protocolUrl = `fdmyalbsif://AAA BBB CCC`;
  window.location.href = protocolUrl;
}
Save_Result();

方法2:创建隐藏a标签模拟点击(避免页面跳转)

function Save_Result() {
  const protocolUrl = `fdmyalbsif://AAA BBB CCC`;
  const a = document.createElement('a');
  a.href = protocolUrl;
  a.style.display = 'none';
  document.body.appendChild(a);
  a.click();
  document.body.removeChild(a);
}
Save_Result();

问题2:参数传递不符合预期

注册表配置修正

当前注册表command项使用"%1" "%2" "%3" "%4"是错误的——系统会把包含fdmyalbsif://前缀的完整协议URL作为%1传递,%2及以后参数全部为空,这就是你看到"fdmyalbsif:\\%20AAA%20BBB%20TTT" "" "" ""的原因。

修改注册表命令,仅传递%1,参数解析逻辑交给批处理:

reg add HKEY_CLASSES_ROOT\FDMyAlbsIF\shell\open\command /t REG_SZ /d "d:\MiAlbs\Manipulate_Files.bat" "%1" /f

批处理参数解析逻辑

在批处理中需要先剥离协议前缀,再解码URL编码(如%20转空格),同时处理多行字符串:

示例Manipulate_Files.bat代码:

@echo off
setlocal enabledelayedexpansion

:: 移除协议前缀
set "full_arg=%~1"
set "params=!full_arg:*fdmyalbsif://=!"

:: 解码URL编码字符
:: 处理换行符:%0A 转为实际换行
set "params=!params:%0A=^
!"
:: 处理空格:%20 转为实际空格
set "params=!params:%20= !"
:: 可按需添加其他编码转换,比如%22转双引号

:: 测试:输出到临时文件
echo !params! > "d:\temp\test_params.txt"

:: 如需拆分参数,可按空格分割
:: for %%p in (!params!) do (
::   echo 单个参数:%%p
:: )
endlocal

多行字符串传递注意事项

在JavaScript中传递多行字符串时,需先对换行符做URL编码(\n转%0A),确保批处理能正确还原:

function Save_Result() {
  const multiLineParam = `AAA
BBB
CCC`;
  // 编码特殊字符
  const encodedParam = encodeURIComponent(multiLineParam);
  const protocolUrl = `fdmyalbsif://${encodedParam}`;
  window.location.href = protocolUrl;
}
Save_Result();

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 16:03:21