我正在编写一个 Web 应用程序,其中包含一个链接,该链接使用自定义协议来调用用户机器上的可执行文件。像这样的东西:
<a href="myprotocol:abc">click this</a>
预期的操作是在用户单击链接并且可执行文件开始运行后,它开始向 Web 服务发送进度信息。我希望用户的浏览器查询相同的服务并在网络浏览器中向用户显示进度。
计划是启动可执行文件,然后开始对服务进行 ajax 调用并更新网页上的一些文本。但是,似乎存在一些与自定义协议链接相关的问题,阻止了 ajax 调用的执行。我收到以下错误:
{"readyState":0,"responseText":"","status":0,"statusText":"error"}
这通常是为跨域问题保留的,但这不是这里发生的事情。
这是我的代码(我将协议更改为“mailto”协议,因此它可以在任何人的机器上运行):
<html>
<head>
<script src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
</head>
<body>
<a id="go" href="mailto:abc@def.com">gopher it</a>
<div id="percent"></div>
</body>
<script>
$(document).ready(function() {
$("#go").click(function() {
pollStatus("abc");
});
});
function pollStatus(id) {
$.ajax({
url: "service/" + id + "/status",
type: "GET",
dataType: "json",
success: function(data) {
$("#percent").html(data.percent);
//keep polling until status is 100%
if(data.percent < 100)
setTimeout(function() { pollStatus(id) }, 500);
},
error: function(e) {
console.log(JSON.stringify(e));
}
});
}
</script>
</html>
如果我更改 $("#go").click() 以返回 false ,则 ajax 调用成功,如下所示:
$(document).ready(function() {
$("#go").click(function() {
pollStatus("abc");
return false;
});
});
但是现在自定义协议没有执行,所以可执行文件永远不会运行。
关于如何让它发挥作用的任何想法?