gpt4 book ai didi

JavaScript - 如何检测自定义 URL 方案是否可用?

转载 作者:可可西里 更新时间:2023-11-01 02:40:21 25 4
gpt4 key购买 nike

在 Windows 操作系统中,我有一个自定义的 URI 方案,它是从

IE, Firefox, Opera, Safari, Google Chrome

启动 Juniper 路由器 VPN SSH 客户端(如 Cisco)。如果安装了 SSH 客户端,基本上它的工作原理如下,可以从网页启动 VPN SSH 客户端。

<a href="juniper:open"> VPN SSH Client </a>

问题:

有时用户没有从 CD/DVD 盒中安装 Juniper 路由器 SSH 客户端应用程序,因此 juniper:open 不执行任何操作。

所以在那种情况下,我需要检测天气或 URL 方案是否可用。

因此,我尝试了 Javascript 方法,但它无法正常工作。因为 juniper:open 实际上不是网络链接。

请问我该如何检测它?

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

然后:

<a onclick="test1()">TEST 1</a>
<a href="juniper:open" onclick="test2(this.href);return false;">TEST 2</a>

最佳答案

编辑评论中的以下建议:

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);

}

<a href="javascript:" onclick="goto('juniper:open', 'https://www.junper-affiliate.com/setup.zip');">TEST 2</a> 

您必须付出的代价是对页面的重复请求。

编辑

这是同源策略的一个很好的解决方法,它阻止使用 XMLHTTPRequest 的异步版本正常工作,因为 SOP 将跨域请求限制为 http,因此 juniper:open 总是会失败。

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;
}
}

编辑

下面的初始解决方案实际上不起作用,因为如果不支持该协议(protocol),则不会抛出异常。

  try {
document.location = 'juniper:open';
} catch (e) {
document.location = 'https://www.junper-affiliate.com/setup.zip';
}

关于JavaScript - 如何检测自定义 URL 方案是否可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24571548/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com