2012-04-15 68 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方案的应用程序。