2012-04-15 44 views
6

在Mac和iOS平臺上,it is possible to do two-way interchange with the native runtime through custom URI schemes/a NSURLProtocol。例如..從原生Objective-C的方法請求NSImage,您可以註冊自定義處理程序(一個簡單的字符串,這裏我用「mycustomprotocol」)與WebKit的/你WebView NSView,和JS喜歡叫它...如何使私人/自定義URL協議的jQuery GET/AJAX請求?

var theURL = 'mycustomprotocol:///' + (textField.value); 
img.innerHTML = '<img src="'+theURL+'" id="string"/>'; 

我會喜歡能夠使用jQuery做請求,因爲在這一點上,它比90年代風格的JS更爲熟悉......但據我所知,在網上只有$.get$.ajaxhttp(s)

會像

javascript:document.location = 'mycustomprotocol://' 

覆蓋jQuery的URL處理?當談到JavaScript時,我確實很愚蠢,我相信這很容易完成。我相信這是整個jQuery移動框架是如何實現的(通過私有URI)。所以,爲什麼google上沒有任何東西對此,是吧?我可以從我的姐妹朋友那裏得到一些幫助嗎?

+0

通常協議是非常有意義的。就像你不能使用瀏覽器的AJAX框架來訪問和ftp資源一樣。它不僅僅是替換url中的字符串。如果你有自定義協議,你還需要一個js「插件」,可以打開該協議的套接字。一旦可用,你可以添加你自己的jquery插件來表現得像'$ .ajax'和'$ .get'。 – 2012-04-15 23:46:32

回答

2

基本的ajax和get方法使用瀏覽器的常規http請求。出於安全原因,ajax類型調用將永遠不會使用自定義協議。如果您嘗試開發不在服務器上並使用.ajax的網站,您會注意到它不會執行任何操作。你必須從頭開始,完全自定義請求處理程序,而不是僅僅改變jQuery中的某些東西。

+0

這是真的,但你可以通過在你的NSURLProtocol響應中添加HTTP頭來解決它:https://stackoverflow.com/questions/15224071/how-to-mock-ajax-call-with-nsurlprotocol/15234787# 15234787 – 2016-10-28 18:49:56

2

這裏是我做了一個callto:協議,該協議在Firefox 24和IE 10的工作(我沒有測試任何其他瀏覽器):

首先 - 你的協議必須已經註冊或您的計算機獲得了」不承認它。 然後在你的標記中創建一個隱藏的鏈接,並將你的協議作爲href。 當我點擊一個按鈕(#calltobutton)時,它會設置隱藏鏈接的值(#clicker),然後點擊它,導致瀏覽器執行操作。

那麼做到這一點:

$('#calltobutton').click(function() { 
    initCallTo(1234567890); 
}); 


function initCallTo(callto) { 
    $('#clicker').attr('href', "callto:" + callto); 
    $('#clicker')[0].click(); 
} 

現在,點擊致電第一鏈接的方法是這樣的,但奇怪的。你可以在this here thread中閱讀更多。

1

這都晚了一點,但你可以使用https://github.com/ded/reqwest做到這一點:

reqwest('mycustomprotocol://myaction', function(result) { 
    // ... 
}); 
+0

針對自定義網址方案嘗試從移動Safari瀏覽器中獲得此功能,並且失敗。然而,直接鍵入url方案或重定向瀏覽器本身。 – stonedauwg 2015-07-07 18:42:04

1

只有這樣我能得到這個工作是做使用JS的DOM瀏覽器窗口重定向。從這個頁面上提到的JQuery甚至reqwestJS庫調用不適合我使用移動safari和一個偵聽自定義URI方案的應用程序。