windows - Abra Internet Explorer desde Chrome utilizando un controlador de protocolo(es decir, url)
internet-explorer handler (7)
He seguido estos pasos y no funciona correctamente para mí. Controlador de protocolo personalizado en cromo
Básicamente, no tengo una aplicación personalizada. Solo quiero crear un controlador para abrir IE con una URL específica.
Aquí está mi registro:
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/""
Está funcionando pero ... cuando estoy abriendo es decir: www.google.com desde Chrome, pide abrir IE pero mantiene el "es decir:" en la URL abierta ... que genera un bucle sin fin.
¿Cómo puedo arreglar eso?
Gracias
el siguiente comando funcionará para todos los parámetros de consulta que se pasarán:
cmd / C set myvar = "% 1" & call set myvar = %% myvar: ie: = %% & call start / separe "iexplore.exe" %% myvar %% & exit
Necesitamos usar las comillas dobles cuando un enlace tiene un ampersand y no se abriría en IE11 como algo después de que el ampersand se recortó.
Crear un controlador de protocolo
guarde este script como
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"
Luego ejecute el script para instalar las claves en su registro. Se verá así:
Ahora los enlaces que usan el protocolo
ie:
se abrirán en Internet Explorer.
<a href="ie:https://www.google.com/">Google</a>
Aquí hay una solución que debería resolver el problema con las URL extendidas que contienen parámetros y caracteres especiales (&,%, etc.)
Reemplace el comando en el archivo de registro con esto:
powershell -windowstyle hidden -command "& {$Url = ''%1'' ; $Url = $Url -replace ''ie:'',''''; $IE=new-object -com internetexplorer.application ; $IE.navigate2($Url) ; $IE.visible=$true }"
Después de algunas pruebas, me muevo a otra estrategia. Me dirijo a un script por lotes intermedio en su lugar. Y el lote dividió el protocolo y la url, y abrió IE.
Aquí está el lote:
echo %1%
set var=%1
set var=%var:~4,-1%
Start "" "%ProgramFiles%/Internet Explorer/iexplore.exe" %var%
La implementación del registro será más genérica si la última línea del registro como
@="cmd /C set myvar=%1 & call set myvar=%%myvar:ie:=%% & call start /separate iexplore %%myvar%% & exit"
No necesitará crear un script personalizado.
En caso de que la URL de destino pueda tener más de 1 parámetros de consulta, puede enfrentar un problema que solo el primer parámetro se pasa a IE (verifique la barra de direcciones en IE para validar). En tal caso, puede optar por la siguiente solución ... simplemente cree un nuevo archivo html que pase la URL de destino después de codificarlo y abra este HTML en IE.
window.location = "ie:"+<URL to the above HTML>+"?path="+encodeURIComponent(<target URL>);
En el archivo HTML, simplemente redirija a la URL de destino decodificada
<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>
Lo anterior funcionó perfectamente en mi aplicación.
el siguiente comando funcionará para todos los parámetros de consulta que se pasarán:
cmd / C set myvar = "% 1" & call set myvar = %% myvar: ie: = %% & call start / separe "iexplore.exe" %% myvar %% & exit
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%%"
Algunas notas importantes:
-
Tienes que envolver
%1
entre comillas dobles. De lo contrario, la URL con varios parámetros comoexample.com?a=1&b=2
se eliminará aexample.com?a=1
, los parámetros después de&
se ignorarán. -
Debe eliminar las comillas dobles cuando llame a
iexplore
. Si no elimina las comillas dobles y abre varias ventanas IE desde Chrome, solo la primera ventana IE obtendrá la URL correcta. Pero eliminar comillas con el comandoset url=%%url:/"=%%
oset url=%%url:~1,-1%%
no funciona. -
Si no puede eliminar esas comillas, agregue los interruptores
-nosessionmerging
y-noframemerging
aiexplore
. Estas son opciones de línea de comandos para controlar el comportamiento de "fusión" para IE.