2012-04-15 4 views
6

Auf Mac- und iOS-Plattformen it is possible to do two-way interchange with the native runtime through custom URI schemes/a NSURLProtocol. Zum Beispiel .. ein NSImage von einer nativen Objective-C-Methode beantragen, können Sie Ihre benutzerdefinierten Handler registrieren (einen einfachen String, hier verwendet i „mycustomprotocol“) mit Webkit/Ihrem WebView NSView, und es von JS nennen wie ...Wie wird eine jQuery GET/AJAX-Anfrage an ein privates/benutzerdefiniertes URL-Protokoll gesendet?

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

ich möchte der Lage sein, jQuery zu verwenden Anfragen zu tun zu machen, wie es zu diesem Zeitpunkt, es besser vertraut als 90's-Stil JS ist .. aber so weit ich im Internet finden können, $.get und $.ajax nur tun http(s).

wäre so etwas wie

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

URL Handling Überschreibung jquery? Ich bin ein Dummkopf, wenn es um JavaScript geht, ich bin mir sicher, dass das leicht gemacht wird. Ich glaube, dass so das gesamte mobile Framework von jQuery implementiert wird (über private URIs). Also, warum gibt es nichts auf Google oder? SO darüber, nicht wahr? Kann ich Hilfe von meinen Schwesterfreunden bekommen?

+0

Normalerweise ist das Protokoll sehr sinnvoll. Sie können nicht das AJAX-Framework des Browsers verwenden, um auf die ftp-Ressource zuzugreifen. Es ist nicht nur eine Frage der Ersetzung der Zeichenfolge in der URL. Wenn Sie ein benutzerdefiniertes Protokoll haben, benötigen Sie auch ein js "plugin", das Sockets mit diesem Protokoll öffnen kann. Sobald dies verfügbar ist, können Sie Ihr eigenes jquery-Plugin hinzufügen, das sich wie '$ .ajax' und' $ .get' verhält. –

Antwort

2

Die grundlegenden Methoden ajax und get verwenden die regulären HTTP-Anfragen des Browsers. Aus Sicherheitsgründen funktionieren Ajax-Anrufe niemals mit einem benutzerdefinierten Protokoll. Wenn Sie versuchen, eine Website zu entwickeln, die sich nicht auf einem Server befindet und .ajax verwendet, werden Sie feststellen, dass nichts unternommen wird. Sie müssen von Grund auf neu starten und einen benutzerdefinierten Request-Handler erstellen, nicht nur etwas in jQuery ändern. Hier

+0

Das ist richtig, aber Sie können umgehen, indem Sie in Ihrer NSURLProtocol-Antwort HTTP-Header hinzufügen: https://stackoverflow.com/questions/15224071/how-to-mock-ajax-call-with-nsurlprotocol/15234787# 15234787 –

2

ist das, was ich für ein callto: Protokoll hat, die in Firefox 24 und IE funktioniert 10 (Ich habe keine anderen Browsern getestet):

Erste - Ihr Protokoll bereits registriert werden müssen oder den Computer gewonnen‘ t erkenne es. Zweitens erstellen Sie eine versteckte Verknüpfung in Ihrem Markup mit Ihrem Protokoll als href. Wenn ich auf eine Schaltfläche klicke (#calltobutton), setzt sie den Wert der versteckten Verbindung (#clicker) und dann und dann klickt sie, was den Browser veranlasst, die Aktion auszuführen.

Dann tun:

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


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

Nun wird das Verfahren auf dem callto Link zu klicken, ist ein, aber seltsam. Sie können mehr darüber in this here thread lesen.

1

Das kommt ein wenig spät, aber Sie https://github.com/ded/reqwest dies tun verwenden können:

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

versuchte dies von mobilen Safari gegen ein benutzerdefiniertes URL-Schema und es schlug fehl. Die direkte Eingabe des URL-Schemas oder das Umleiten des Browsers selbst funktionierte jedoch. – stonedauwg

1

Nur so kann ich diese Arbeit bekommen konnte, war ein Browserfenster Umleitung mit dem DOM in JS zu tun. Das Anrufen von JQuery oder sogar der reqwestJS-Bibliothek, die auf dieser Seite erwähnt wird, funktionierte für mich nicht mit einer mobilen Safari und einer App, die nach benutzerdefinierten URI-Schemata lauscht.

Verwandte Themen