如何在 Windows 中的自定义协议处理程序中转义和与号



我按照这个链接做了一个自定义协议处理程序。情况是我需要打开一个只能在IE中打开的链接,并且可能包含多个查询参数,并且应该从我们在Chrome上运行的网络应用程序中在IE中打开(这真的很烦人(。经过多次尝试和失败,我设法找到了将条目添加到 windows 注册表配置单元的代码片段,并制作了.reg文件并运行:

Windows Registry Editor Version 5.00
[HKEY_CURRENT_USERSoftwareClassesie]
"URL Protocol"=""""
@=""URL:IE Protocol""
[HKEY_CURRENT_USERSoftwareClassesieDefaultIcon]
@=""explorer.exe,1""
[HKEY_CURRENT_USERSoftwareClassesieshell]
[HKEY_CURRENT_USERSoftwareClassesieshellopen]
[HKEY_CURRENT_USERSoftwareClassesieshellopencommand]
@="cmd /k set myvar=%1 & call set myvar=%%myvar:ie:=%% & call "C:\Program Files (x86)\Internet Explorer\iexplore.exe" %%myvar%% & exit /B"

它有效,但问题是如果一个链接包含超过 1 个查询参数,则省略除第一个参数外的所有参数,我确信这是因为 windows 命令行中的字符编码:

e.g. some_example_url?query1=value1&query2=value2&query3=value3 is becoming some_example_url?query1=value1

我找到了这个解决方案,但它也没有用。如何正确转义&字符,以便可以使用所有查询参数在IE上打开它。(如前所述,链接是由在Chrome上运行的网络应用程序触发的(

编辑:触发的代码:

fileClicked(url) {
// url should be escaped with ^
const escapedUrl = url.replace(/&/gi, '^&');
const ie = document.createElement('a');
// ie: scheme => custom protocol handler
// host computer (windows) should add custom protocol to windows registry
ie.href = `ie:${escapedUrl}`;
ie.click();
}

编辑 2@muzafako修复了脚本,只是最后一行应该像下面这样替换:

@="cmd /c set url="%1" & call set url=%%url:ie:=%% & call start iexplore -nosessionmerging -noframemerging %%url%%"

根本不需要解码查询参数。我试图找到这个问题的解决方案,并看到了这个答案。它对我有用。只需将命令行更改为:

@="cmd /c set url="%1" & call set url=%%url:ie:=%% & call start iexplore -nosessionmerging -noframemerging %%url%%"

相关内容

  • 没有找到相关文章

最新更新