我按照这个链接做了一个自定义协议处理程序。情况是我需要打开一个只能在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%%"