通过自定义协议处理程序(Chrome到IE)将带有URL的参数传递给

时间:2018-07-25 14:09:19

标签: javascript html batch-file cmd registry

我已按照this Stackoverflow thread中的说明在Windows 7中创建自定义协议处理程序,该处理程序将在Internet Explorer中打开任何以“ ie:”为前缀的URL。正如Microsofts post中有关自定义协议处理程序的说明中所述,特殊字符的处理方式存在问题,因此在通过URL传递参数时也会遇到问题。

linked thread中,Saurabh发表了一篇文章,建议使用正确解析URL的脚本创建本地html文件,然后重定向到此新的更新URL。我还没有得到这个工作。

有效方法:

  • 协议处理程序可以从Internet Explorer中的外部程序打开自定义URL(即:https://www.google.se,即:file:/// C:/ieRedirect.html)。

  • 使用协议打开的本地文件可以启动包含参数的硬编码 URL(不是很有用,请参见下面的代码)

<html>
	<head>
		<title>
			IE Redirect
		</title>
		<script>
			function testOpenURL(){
				window.open('https://www.google.se/search?q=stackoverflow', '_self');
			}
		</script>
	</head>
	<body onload="testOpenURL()">

	</body>
</html>

问题:

  • 是否有办法使Saurabh的变通办法起作用并通过URL传递一个或多个参数?

  • 还有另一种方法可以通过自定义协议处理程序传递参数吗?

任何建议都将受到高度赞赏。您可以在下面找到我的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]
@="\"iexplore.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 /C set myvar=%1 & call set myvar=%%myvar:ie:=%% & call start /separate iexplore %%myvar%% & exit"

1 个答案:

答案 0 :(得分:0)

我也未能修改命令字符串 vaue 上的协议后缀,所以我有一种不同的方法来解决这个问题:

  • 在您的服务器上创建一个页面(例如 http: //<your.domain>/redirect/index.php),如下所示:
<?php
   $url = isset($_GET['url']) ? $_GET['url'] : die('Access denied');
   $url = str_replace('ie', 'http', $url);
   header('Location: ' . $url);
   die();
?>
  • command 键值设置为 "iexplore.exe" "http://<your.domain>/redirect?url=%1"