2012-04-15 15 views
6

Su entrambe le piattaforme Mac e iOS, it is possible to do two-way interchange with the native runtime through custom URI schemes/a NSURLProtocol. Per esempio .. per richiedere un NSImage da un metodo nativo Objective-C, è possibile registrare il gestore personalizzato (una semplice stringa, qui ho usato "mycustomprotocol") con Webkit/vostro WebView NSView, e chiamare da JS come ...Come effettuare una richiesta jQuery GET/AJAX a un protocollo URL privato/personalizzato?

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

Vorrei essere in grado di utilizzare jQuery per fare fare richieste, in quanto a questo punto, è più familiare di quanto 90's-style JS .. ma per quanto posso trovare sul web, $.get e $.ajax solo fare http(s).

Sarebbe qualcosa di simile gestione degli URL

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

esclusione di jQuery? Sono un idiota quando si tratta di JavaScript, sono sicuro che questo è fatto facilmente. Credo che questo sia il modo in cui viene implementato l'intero framework mobile di jQuery (tramite URI privati). Quindi, perché non c'è niente su google o COSÌ a riguardo, eh? Posso avere l'aiuto di mia sorella amici?

+0

Di solito il protocollo è molto significativo. Come non è possibile utilizzare i browser AJAX framework per accedere e risorse ftp. Non è solo questione di sostituire la stringa nell'URL. Se hai un protocollo personalizzato avrai anche bisogno di un "plugin" js che possa aprire socket con quel protocollo. Una volta che è disponibile, puoi aggiungere il tuo plugin jquery per comportarti come '$ .ajax' e' $ .get'. –

risposta

2

I metodi base di ajax e get utilizzano le normali richieste http del browser. Per motivi di sicurezza, le chiamate di tipo ajax non funzioneranno mai con un protocollo personalizzato. Se cerchi di sviluppare un sito Web che non si trova su un server e usa .ajax, noterai che non farà nulla. Dovrai iniziare da zero e creare un gestore di richieste personalizzato del tutto, non solo alterare qualcosa all'interno di jQuery.

+0

Questo è un po 'vero, ma puoi aggirarlo aggiungendo le intestazioni HTTP nella risposta NSURLProtocol: https://stackoverflow.com/questions/15224071/how-to-mock-ajax-call-with-nsurlprotocol/15234787# 15234787 –

2

Ecco quello che ho fatto per un protocollo callto:, che funziona in Firefox 24 e IE 10 (non ho provato qualsiasi altro browser):

In primo luogo - il protocollo deve già essere registrato o il computer ha vinto' Lo riconosco Secondo creare un collegamento nascosto nel markup con il protocollo come href. Quando faccio clic su un pulsante (#calltobutton), imposta il valore del collegamento nascosto (#clicker), quindi fa clic su di esso e il browser esegue l'azione.

poi fare questo:

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


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

Ora, il metodo del cliccando sul link callto è una, ma strano. Puoi leggere ulteriori informazioni a riguardo in this here thread.

1

Questo arriva un po 'in ritardo, ma è possibile utilizzare https://github.com/ded/reqwest per fare questo:

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

provato da Safari mobile contro uno schema URL personalizzato e non è riuscito. La digitazione dello schema URL direttamente o il reindirizzamento del browser stesso ha funzionato comunque. – stonedauwg

1

unico modo ho potuto ottenere questo lavoro è stato quello di fare un redirect finestra del browser utilizzando il DOM in JS. Chiamare da JQuery o anche dalla libreria reqwestJS menzionata in questa pagina non ha funzionato per me con mobile safari e un'app che ascolta gli schemi URI personalizzati.

Problemi correlati