我正在編寫一個Web應用程序,其中包含一個使用自定義協議來調用用戶計算機上的可執行文件的鏈接。事情是這樣的:爲什麼我的自定義協議會干擾ajax調用?
<a href="myprotocol:abc">click this</a>
預期的操作是,用戶點擊鏈接和可執行文件開始運行後,它開始發送進度信息的Web服務。我希望用戶的瀏覽器查詢相同的服務並在Web瀏覽器中向用戶顯示進度。
該計劃是啓動可執行文件,然後開始對服務進行ajax調用並更新網頁上的一些文本。但是,似乎有一些與自定義協議鏈接有關的問題阻止了ajax調用的執行。我收到以下錯誤:
{ 「readyState的」 0 「responseText的」: 「」, 「狀態」:0, 「狀態文本」: 「錯誤」}
這通常是預留給跨域問題但這不是這裏發生的事情。
這裏是我的代碼(我改變了協議是「電子郵件地址」協議,所以它會任何人的機器上工作):
<html>
<head>
<script src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
</head>
<body>
<a id="go" href="mailto:[email protected]">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>
如果我改變$ Ajax調用成功(「#去」) 。點擊()像這樣返回false:
$(document).ready(function() {
$("#go").click(function() {
pollStatus("abc");
return false;
});
});
但現在的自定義協議不執行這樣的可執行文件永遠不會運行。
關於如何讓這個工作的任何想法?
啊,關於「停止所有腳本執行」的部分是我沒有意識到的。謝謝,關於iframe的好建議。 – d512