我已按照 此 Stackoverflow 线程 中的说明在 Windows 7 中创建自定义协议处理程序,该处理程序将在 Internet Explorer 中打开任何前缀为“ie:”的 URL。正如关于自定义协议处理程序的Microsoft 帖子中所解释的,存在如何处理特殊字符的问题,因此会出现通过 URL 传递参数的问题。
在链接的线程中,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 传递一个或多个参数?
还有另一种方法可以通过自定义协议处理程序传递参数吗?
任何建议都将受到高度赞赏。您可以在下面找到我的注册表文件。
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"
我也未能修改命令字符串值的协议后缀,因此我有一种不同的方法来解决此问题:
在您的服务器上创建一个页面(例如
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"