15

我已按照这些步骤操作,但它对我来说无法正常工作。 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:”...这会产生无限循环。

我该如何解决?

谢谢

截屏

4

7 回答 7

8

创建协议处理程序

将此脚本另存为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>

演示页面

于 2017-01-19T18:27:35.037 回答
1

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

这是批次:

echo %1%
set var=%1
set var=%var:~4,-1%
Start "" "%ProgramFiles%\Internet Explorer\iexplore.exe" %var%
于 2016-11-11T08:43:01.773 回答
1

这是一个解决方案,应该解决包含参数和特殊字符(&、% 等)的扩展 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 }"
于 2019-05-09T14:16:33.863 回答
1

工作注册表

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用双引号括起来。否则带有多个参数的 url likeexample.com?a=1&b=2将被剥离为example.com?a=1, 之后的参数&将被忽略。
  2. 调用时必须去掉双引号iexplore。如果您不删除双引号并从 chrome 打开多个 IE 窗口,则只有第一个 IE 窗口会获得正确的 URL。set url=%%url:\"=%%但是用命令或删除引号set url=%%url:~1,-1%%不起作用。
  3. 如果您无法删除这些引号,请添加开关-nosessionmerging-noframemergingiexplore. 这些是用于控制 IE 的“合并”行为的命令行选项。
于 2019-05-17T01:27:56.730 回答
0

如果您将注册表的最后一行设置为

@="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:"+<URL to the above HTML>+"?path="+encodeURIComponent(<target URL>);

在 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>

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

于 2017-11-05T07:56:34.673 回答
0

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

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

于 2018-10-18T04:32:51.980 回答
0

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

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

我们需要使用双引号,当链接中有一个&符号并且在删除&符号后不会在 IE11 中打开时,我们需要使用双引号。

于 2019-09-18T15:09:02.983 回答