我在注册表中创建了一个名为fdmyalbs的自定义协议.禁用此协议将执行PowerShell脚本,该脚本暂时将接收到的字符串(命令+参数)记录到预定义的文件中.

当使用Windows的文件资源管理器并在地址字段中输入字符串fdmyalbs:MyApp?data=sdfsdfsdfsfdsf sdfsdfsdfsdfsdfsdf时,创建的文件显示fdmyalbs:MyApp?data=sdfsdfsdfsfdsf%20sdfsdfsdfsdfsdfsdf,除了空白被%20替换外,这正是输入的内容.

这意味着自定义协议定义是正确的,并按预期激活脚本. 现在,我正在try 使用以下代码在vanilla个JavaScript函数中执行相同的操作:

:
:
var l_Test_URL = 'fdmyalbs:MyApp?data=sdfsdfsdfsfdsf sdfsdfsdfsdfsdfsdf' ;
const fetchPromise = fetch(l_Test_URL);
  
  fetchPromise
    .then((response) => {
      if (!response.ok) {
        throw new Error(`HTTP error: ${response.status}`);
      }
      return response.json();
    })
    .then((data) => {
      console.log(data[0].name);
    });
:
:
  

此代码触发一条错误消息,其内容为:Fetch API cannot load fdmyalbs:MyApp?data=sdfsdfsdfsfdsf%20sdfsdfsdfsdfsdfsdf. URL scheme "fdmyalbs" is not supported.

我的理解是,fetch在这种情况下是不合适的.我正在寻找一种替代方法(而不是FETCH)来完成这项工作. 任何建议都将不胜感激.

推荐答案

Fetch API与HTTP有着千丝万缕的联系.这意味着你的解释是正确的...您不能将Fetch API与您的自定义协议处理程序一起使用.

据我所知,您唯一能做的就是链接到那个定制协议.

<a href="fdmyalbs:MyApp?data=sdfsdfsdfsfdsf%20sdfsdfsdfsdfsdfsdf">Launch App</a>

您也可以通过编程方式调用该链接上的点击.

document.querySelector('a').click();

这应该会提示用户启动您的应用程序.

自定义协议处理程序的替代方案包括将Web服务器作为应用程序的一部分运行.或者,您可以创建一个浏览器扩展来在您的应用程序和您的本地应用程序之间来回推送数据.

Javascript相关问答推荐

为什么(1 + Number.Min_UTE)等于1?

使用事件监听器在JavaScript中重新分配全局变量

vue3类型脚本中可能未定义对象''

使用JavaScript更改json值顺序

如何将拖放功能添加到我已自定义为图像的文件输入HTML标签中?

使用print This时, map 容器已在LeafletJS中初始化

如何在JavaScript中在文本内容中添加新行

如何避免移动设备中出现虚假调整大小事件?

传递一个大对象以在Express布局中呈现

为什么这个JS模块在TypeScript中使用默认属性导入?""

Angular material 拖放堆叠的牌副,悬停时自动展开&

如何从html元素创建树 struct ?

如何通过将实例方法的名称传递给具有正确类型的参数的继承方法来调用实例方法?

当id匹配时对属性值求和并使用JavaScript返回结果

如何使用JavaScript拆分带空格的单词

扩展类型的联合被解析为基类型

根据一个条件,如何从处理过的数组中移除一项并将其移动到另一个数组?

FileReader()不能处理Firefox和GiB文件

与在编剧中具有动态价值的定位器交互

如何在下一个js中更改每个标记APEXCHARTS图表的 colored颜色