On both Mac and iOS platforms, it is possible to do two-way interchange with the native runtime through custom URI schemes / a NSURLProtocol
. For example.. to request an NSImage
from a native Objective-C method, you can register your custom handler (a simple string, here i used "mycustomprotocol
") with Webkit / your WebView NSView
, and call it from JS like…
var theURL = 'mycustomprotocol:///' + (textField.value);
img.innerHTML = '<img src="'+theURL+'" id="string"/>';
I would LIKE to be able to use jQuery to do make requests, as at this point, it is more familiar than 90's-style JS.. but as far as I can find on the web, $.get
and $.ajax
only do http(s)
.
Would something like
javascript:document.location = 'mycustomprotocol://'
override jquery's URL handling? I'm a dumbdumb when it comes to JavaScript, I'm sure this is easily done.. I do believe this is how the entire jQuery mobile framework is implemented (via private URI's).. So, why is there nothing on google or SO about it, huh? Can i get some help from my sister friends?
The basic ajax and get methods use the browser's regular http requests. For security reasons, ajax type calls will never work with a custom protocol. If you try to develop a website that isn't on a server and use .ajax, you'll notice it will do nothing. You'll have to start from the ground up and make a custom request handler altogether, not just alter something within jQuery.
This comes a little late, but you can use https://github.com/ded/reqwest to do this:
Here is what I did for a
callto:
protocol, which works in Firefox 24 and IE 10 (I haven't tested any other browsers):First - your protocol must already be registered or your computer won't recognize it. Second create a hidden link in your markup with your protocol as the href. When I click on a button (
#calltobutton
), then it sets the value of the hidden link (#clicker
) and then and then clicks it, causing the browser to perform the action.Then do this:
Now, the method of clicking on the callto link is a but strange. You can read more about that in this here thread.
Only way I could get this to work was to do a browser window redirect using the DOM in JS. Calling from JQuery or even the reqwestJS library mentioned on this page didnt work for me with mobile safari and an app that listens for custom URI schemes.