简体   繁体   中英

How to make a jQuery GET/AJAX request to a private/custom URL protocol?

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.

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:

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


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

Now, the method of clicking on the callto link is a but strange. You can read more about that in this here thread .

This comes a little late, but you can use https://github.com/ded/reqwest to do this:

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

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM