Windows 10中通过自定义协议用JavaScript调用批处理文件失败
问题描述
我参考Stack Overflow教程在Windows注册表中创建了自定义协议条目,之后编写了如下JavaScript代码尝试调用批处理脚本:
Save_Result = async () => { const location = window.location.hostname; const settings = { method: 'POST', headers: { Accept: 'application/json', 'Content-Type': 'application/text', } }; try { const fetchResponse = await fetch(`FDMyAlbsIF: "asdads" "dfgdfg" "dfgdfgert"` , settings); const data = await fetchResponse.text; return data; } catch (e) { return e; } } Save_Result () ;
运行时出现以下错误:
Fetch API cannot load fdmyalbsif: "asdads" "dfgdfg" "dfgdfgert". URL scheme "fdmyalbsif" is not supported.
请问我操作过程中哪里出现了问题?
问题原因与解决办法
核心问题:Fetch API不支持自定义协议
Fetch API是专为HTTP/HTTPS等标准网络协议设计的请求工具,完全不支持调用fdmyalbsif:这类自定义本地协议,浏览器的安全机制也会限制这类跨协议操作。正确调用自定义协议的方式
触发自定义协议不需要用Fetch,直接用以下两种方法即可:- 创建隐藏
<a>标签模拟点击(推荐,不易被浏览器拦截):function callCustomProtocol() { const link = document.createElement('a'); link.href = 'FDMyAlbsIF: "asdads" "dfgdfg" "dfgdfgert"'; link.style.display = 'none'; document.body.appendChild(link); link.click(); document.body.removeChild(link); } callCustomProtocol(); - 使用
window.open()(可能被浏览器弹窗拦截,需要用户允许):window.open('FDMyAlbsIF: "asdads" "dfgdfg" "dfgdfgert"', '_blank');
- 创建隐藏
额外注意点
- 自定义协议的参数格式要和注册表中配置的批处理脚本参数规则匹配,确保脚本能正确解析接收的参数。
- 浏览器会限制无用户交互的自定义协议调用,建议将触发逻辑绑定到按钮点击等用户主动操作事件上。
内容的提问来源于stack exchange,提问作者FDavidov
相关产品推荐
相关产品推荐

