javascript - example - this hash
JavaScript: ¿cómo detectar si el esquema de URL personalizado está disponible o no? (2)
EDITAR Siguiendo sugerencias en comentarios:
function goto(url, fallback) {
var script = document.createElement(''script'');
script.onload = function() {
document.location = url;
}
script.onerror = function() {
document.location = fallback;
}
script.setAttribute(''src'', url);
document.getElementsByTagName(''head'')[0].appendChild(script);
}
y
<a href="javascript:" onclick="goto(''juniper:open'', ''https://www.junper-affiliate.com/setup.zip'');">TEST 2</a>
El precio que debe pagar es una solicitud duplicada para la página.
EDITAR
Esta es una buena solución para la política del mismo origen, que evita que una versión de asincronización utilizando XMLHTTPRequest funcione correctamente, ya que SOP restringe las solicitudes entre dominios a http y juniper: por lo tanto, abrir siempre fallaría.
function goto(url, fallback) {
var xmlhttp=new XMLHttpRequest();
xmlhttp.open(''GET'', url, false);
try {
xmlhttp.send(null); // Send the request now
} catch (e) {
document.location = fallback;
return;
}
// Throw an error if the request was not 200 OK
if (xmlhttp.status === 200) {
document.location = url;
} else {
document.location = fallback;
}
}
EDITAR
La solución inicial a continuación no funciona, porque no se lanza ninguna excepción si no se admite la protocal.
try {
document.location = ''juniper:open'';
} catch (e) {
document.location = ''https://www.junper-affiliate.com/setup.zip'';
}
En el sistema operativo Windows, tengo un esquema de URI personalizado, que se utiliza desde
IE, Firefox, Opera, Safari, Google Chrome
para ejecutar el cliente VPN SSH de router Juniper (como Cisco). Básicamente funciona de la siguiente manera si el cliente SSH está instalado, desde la página web se puede iniciar VPN SSH Client.
<a href="juniper:open"> VPN SSH Client </a>
Problema:
a veces el usuario no instaló la aplicación cliente SSH de enrutador Juniper desde la caja de CD / DVD, por lo tanto, el enebro: abierto no hace nada.
Entonces, en ese caso, necesito detectar el clima o no, el esquema de URL está disponible.
Por lo tanto, probé el método Javascript pero no funciona exactamente. porque el enebro: abierto en realidad no es un enlace web.
¿Cómo puedo detectarlo por favor?
<script>
// Fails
function test1(){
window.location = ''juniper:open'';
setTimeout(function(){
if(confirm(''Missing. Download it now?'')){
document.location = ''https://www.junper-affiliate.com/setup.zip'';
}
}, 25);
//document.location = ''juniper:open'';
}
// Fails
function test2(h){
document.location=h;
var time = (new Date()).getTime();
setTimeout(function(){
var now = (new Date()).getTime();
if((now-time)<400) {
if(confirm(''Missing. Download it now?'')){
document.location = ''https://www.junper-affiliate.com/setup.zip'';
} else {
document.location=h;
}
}
}, 300);
}
</script>
Entonces:
<a onclick="test1()">TEST 1</a>
<a href="juniper:open" onclick="test2(this.href);return false;">TEST 2</a>
Después de buscar mucho, no he encontrado nada que pueda ayudar a resolver mi problema. Pero esto es lo que ahora estoy haciendo
1) Escriba un pequeño servidor web pequeño que pueda ejecutarse en la PC las 24 horas, 7 días a la semana, en el arranque, en el momento del bloqueo. Use python nativo:
python -m SimpleHTTPServer [port]
2) el pequeño servidor web escuchará un puerto anormal como 10001 o puertos TCP que nunca se utilizan
3) desde el navegador tenemos que comunicarnos con http://localhost:10001
solo para obtener una respuesta
4) sobre la base de esa respuesta tenemos que decidir
De lo contrario, no hay manera de que esté disponible
EDITAR: O puede hacerlo de esta manera: InnoSetup: ¿hay alguna forma de crear cookies para Internet Explorer de forma manual?