【问题标题】:Open Internet Explorer from Chrome using a protocol handler (ie:url)使用协议处理程序从 Chrome 打开 Internet Explorer(即:url)
【发布时间】:2017-03-24 16:53:35
【问题描述】:

我已按照这些步骤操作,但它对我来说无法正常工作。 Custom protocol handler in chrome

基本上,我没有自定义应用程序。我只想创建一个处理程序来打开具有特定 URL 的 IE。

这是我的注册:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Classes\ie]
"URL Protocol"="\"\""
@="\"URL:IE Protocol\""

[HKEY_CURRENT_USER\Software\Classes\ie\DefaultIcon]
@="\"explorer.exe,1\""

[HKEY_CURRENT_USER\Software\Classes\ie\shell]

[HKEY_CURRENT_USER\Software\Classes\ie\shell\open]

[HKEY_CURRENT_USER\Software\Classes\ie\shell\open\command]
@="\"C:\\Program Files\\Internet Explorer\\iexplore.exe\" \"%1\""

它正在工作,但是...当我从 Chrome 打开 ie:www.google.com 时,它会要求打开 IE,但它会在打开的 URL 中保留“ie:”...这会产生无限循环。

我该如何解决这个问题?

谢谢

【问题讨论】:

  • 您需要从 url 中删除 ie: 架构。在第 14 行使用@="cmd /v:on /q /c \"set url=%1 & start C:\\PROGRA~1\\INTERN~1\\iexplore.exe !url:~3!\" "
  • 如果我理解正确,你控制双方(1. 创建 url 的一方和 2. 读取 url 并转发到 IE 的一方),所以你可以想出一个特殊的转义你自己的方案。

标签: windows internet-explorer handler protocol-handler


【解决方案1】:

经过几次测试,我转向了另一种策略。 我的目标是一个中间批处理脚本。 并且批量拆分协议和url,打开IE。

这是批次:

echo %1%
set var=%1
set var=%var:~4,-1%
Start "" "%ProgramFiles%\Internet Explorer\iexplore.exe" %var%

【讨论】:

  • 那么如何从 chrome 运行这个脚本呢?
【解决方案2】:

创建协议处理程序

将此脚本另存为internet-explorer-protocol-handler.reg:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Classes\ie]
"URL Protocol"="\"\""
@="\"URL:IE Protocol\""

[HKEY_CURRENT_USER\Software\Classes\ie\DefaultIcon]
@="\"explorer.exe,1\""

[HKEY_CURRENT_USER\Software\Classes\ie\shell]

[HKEY_CURRENT_USER\Software\Classes\ie\shell\open]

[HKEY_CURRENT_USER\Software\Classes\ie\shell\open\command]
@="cmd /k set myvar=%1 & call set myvar=%%myvar:ie:=%% & call \"C:\\Program Files (x86)\\Internet Explorer\\iexplore.exe\" %%myvar%% & exit /B"

然后运行脚本以在注册表中安装密钥。它看起来像这样:

现在使用ie: 协议的链接将在 Internet Explorer 中打开。

<a href="ie:https://www.google.com/">Google</a>

Demo Page

【讨论】:

  • 如果 url 包含特殊字符,如 = 或 &,它就不起作用。
  • 从 Internet Explorer 中打开 Chrome ?
  • 带有 example.com?a=1&b=2 等参数的 URL 将无法正常工作。它将被剥离为example.com?a=1,而b 将被忽略。
  • @Jeremy Danyow 它完美运行!!问题是在打开之前,Chrome 会显示一个对话框:“打开 Windows 命令处理器”。可以避免确认吗?
  • @gabi13,在哪里可以找到解决方案,我也试图找到禁用打开 cmd 处理器的方法。此外,加载新浏览器时不会捕获辅助参数。
【解决方案3】:

如果您将注册表的最后一行设置为,则注册表的实现将更加通用

@="cmd /C set myvar=%1 & call set myvar=%%myvar:ie:=%% & call start /separate iexplore %%myvar%% & exit"

您不需要创建自定义脚本。

如果目标 URL 可以有多个查询参数,您可能会遇到只有第一个参数被传递给 IE 的问题(检查 IE 上的地址栏以验证)。 在这种情况下,您可以采用以下解决方法...只需在编码后创建一个新的 html 文件并传递目标 URL,然后在 IE 上打开此 HTML。

window.location = "ie:"+&lt;URL to the above HTML&gt;+"?path="+encodeURIComponent(&lt;target URL&gt;);

在 HTML 文件中,只需重定向到解码后的目标 URL

<html>
	<head>
		<title>
			IE Redirect
		</title>
		<script>
			function getUrlVars() {
				var vars = {};
				var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi,
				function(m,key,value) {
					vars[key] = value;
				});
				return vars;
			}

			function openURL(){
				window.location.href=decodeURIComponent(getUrlVars()["path"]);
			}
		</script>
	</head>
	<body onload="openURL()">

	</body>
</html>

以上内容在我的应用程序中完美运行。

【讨论】:

    【解决方案4】:

    以下命令适用于所有要传递的查询参数:

    cmd /C set myvar="%1" & call set myvar=%%myvar:ie:=%% & call start /separate "iexplore.exe" %%myvar%% & exit

    【讨论】:

      【解决方案5】:

      这是一个应该解决包含参数和特殊字符(&、% 等)的扩展 url 问题的解决方案

      像这样: https://www.google.com/search?q=open-internet-explorer-from-chrome-using-a-protocol-handler&oq=open-internet-explorer-from-chrome-using-a-protocol-handler&aqs=chrome..69i57j69i60l3.1754j0j4&sourceid=chrome&ie=UTF-8

      将 reg 文件中的命令替换为:

      powershell -windowstyle hidden -command "& {$Url = '%1' ;  $Url = $Url -replace 'ie:',''; $IE=new-object -com internetexplorer.application ; $IE.navigate2($Url) ; $IE.visible=$true }"
      

      【讨论】:

        【解决方案6】:

        Working registry:

        Windows Registry Editor Version 5.00
        
        [HKEY_CURRENT_USER\Software\Classes\ie]
        "URL Protocol"=""
        @="URL:IE Protocol"
        
        [HKEY_CURRENT_USER\Software\Classes\ie\shell]
        
        [HKEY_CURRENT_USER\Software\Classes\ie\shell\open]
        
        [HKEY_CURRENT_USER\Software\Classes\ie\shell\open\command]
        @="cmd /c set url=\"%1\" & call set url=%%url:ie:=%% & call start iexplore -nosessionmerging -noframemerging %%url%%"
        

        一些重要说明:

        1. 您必须将%1 括在双引号中。 否则带有多个参数的网址(如example.com?a=1&amp;b=2)将被剥离为example.com?a=1&amp; 之后的参数将被忽略。
        2. 调用iexplore时必须去掉双引号。如果您不删除双引号并从 chrome 打开多个 IE 窗口,则只有第一个 IE 窗口会获得正确的 URL。但是使用命令 set url=%%url:\"=%%set url=%%url:~1,-1%% 删除引号不起作用。
        3. 如果您无法删除这些引号,请将开关 -nosessionmerging-noframemerging 添加到 iexplore 这些是 command-line options 以控制 IE 的“合并”行为。李>

        【讨论】:

        • 它工作正常。但除了一些小的化妆品相关的东西。当我单击一个按钮时,我会收到类似“打开 Windows 命令处理器”的提示。有没有办法隐藏这个提示,让用户无需一直点击“打开 Windows 命令处理器”?
        【解决方案7】:

        以下命令适用于所有要传递的查询参数:

        cmd /C set myvar="%1" & call set myvar=%%myvar:ie:=%% & call start /separate "iexplore.exe" %%myvar%% & 退出

        当链接中包含 & 符号并且在删除 & 符号后无法在 IE11 中打开时,我们需要使用双引号。

        【讨论】:

          猜你喜欢
          • 2015-06-13
          • 2021-01-05
          • 1970-01-01
          • 2016-11-26
          • 2016-10-08
          • 2016-09-11
          • 1970-01-01
          • 2012-02-23
          • 2011-03-15
          相关资源
          最近更新 更多