用于启动IE的自定义协议处理程序 - 结果不一致

时间:2017-11-03 13:06:17

标签: windows internet-explorer protocol-handler

我在使自定义协议处理程序启动IE的行为方面遇到了问题。

这是我想要做的: 我有我的网页,用户需要访问chrome。该页面包含指向某些外部Web应用程序的链接。这些外部Web应用程序仅在Internet Explorer上运行良好。 我必须以某种方式使用外部网络应用程序的URL启动IE,点击链接。

客户不愿意使用像IETab这样的插件来启动这些外部应用程序。

因此,我尝试定义一个自定义协议处理程序,它将目标URL作为参数,并使用目标URL启动Internet Explorer浏览器。

只要没有IE窗口已经打开,它似乎工作正常。但是当已经有IE运行的实例时,行为会有所不同。

我使用了以下代码:

在HTML文件中:

function launchIE(target){
window.location = "launchIE:\"http://external.url.com?param1=1&param2=2\"";
}

我已将处理程序注册到自定义协议" launchIE"通过在Windows注册表中添加以下内容:

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\launchIE]
"URL Protocol"="\"\""
@="\"URL:launchIE Protocol\"" 

[HKEY_CLASSES_ROOT\launchIE\DefaultIcon] 
@="\"iexplore.exe,1\"" 

[HKEY_CLASSES_ROOT\launchIE\shell]
[HKEY_CLASSES_ROOT\launchIE\shell\open]
[HKEY_CLASSES_ROOT\launchIE\shell\open\command] 
@="cmd /C set myvar=%1 & call set myvar=%%myvar:launchIE:=%% & call start /separate iexplore %%myvar%% & exit"

通过上面的设置,当我点击按钮触发上面的javascript时,我启动了Internet Explorer。 如果没有Internet Explorer实例已经打开,IE将正确打开URL http://external.url.com?param1=1&param2=2screenshot of IE showing correct URL

但是,如果已经打开了一个IE实例(由用户手动或由于先前点击我页面上的按钮),IE会打开一个错误的网址http://%22http//external.url.com?param1=1&param2=2" screenshot of IE showing wrong URL

请帮忙...我该如何解决这个问题?

我正在开发Windows 10& IE 11。

1 个答案:

答案 0 :(得分:0)

我通过创建一个单独的批处理文件并用双引号将URL括起来来解决该问题:

[HKEY_CURRENT_USER\Software\Classes\ie\shell\open\command]
@="cmd /C c:/tmp/ie.bat \"%1\" & exit"

ie.bat:

set var=%1
set var=%var:ie:=%
call start /separate iexplore %var%
exit