カスタム プロトコルを使用してユーザーのマシンで実行可能ファイルを呼び出すリンクを含む Web アプリを作成しています。このようなもの:
<a href="myprotocol:abc">click this</a>
意図したアクションは、ユーザーがリンクをクリックして実行可能ファイルの実行が開始された後、Web サービスへの進行状況情報の送信を開始することです。ユーザーのブラウザーが同じサービスを照会し、進行状況を Web ブラウザーでユーザーに表示したいと考えています。
計画では、実行可能ファイルを開始してから、サービスへの ajax 呼び出しを開始し、Web ページ上のテキストを更新することを開始しました。ただし、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;
});
});
しかし、カスタム プロトコルが実行されないため、実行可能ファイルは実行されません。
これを機能させる方法についてのアイデアはありますか?