2012-04-15 26 views
6

Trên cả nền tảng Mac và iOS, it is possible to do two-way interchange with the native runtime through custom URI schemes/a NSURLProtocol. Ví dụ .. để yêu cầu một số NSImage từ phương thức Objective-C, bạn có thể đăng ký trình xử lý tùy chỉnh của mình (một chuỗi đơn giản, tại đây tôi đã sử dụng "mycustomprotocol") với Webkit/WebView NSView và gọi nó từ JS như…Làm thế nào để tạo yêu cầu jQuery GET/AJAX cho giao thức URL riêng/tùy chỉnh?

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

Tôi muốn có thể sử dụng jQuery để thực hiện yêu cầu, tại thời điểm này, nó quen thuộc hơn so với JS's style JS .. nhưng theo như tôi có thể tìm thấy trên web, $.get$.ajax chỉ làm http(s).

Would cái gì đó như xử lý URL

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

override jquery không? Tôi là một câm khi nói đến JavaScript, tôi chắc chắn điều này là dễ dàng thực hiện .. Tôi tin rằng đây là cách toàn bộ khung công tác di động jQuery được thực hiện (thông qua URI riêng) .. Vì vậy, tại sao không có gì trên google hoặc SO về nó, huh? Tôi có thể nhận được sự giúp đỡ từ những người bạn gái của tôi không?

+0

Thông thường giao thức rất có ý nghĩa. Giống như bạn không thể sử dụng khung AJAX của trình duyệt để truy cập và tài nguyên ftp. Nó không chỉ là vấn đề thay thế chuỗi trong url. Nếu bạn có giao thức tùy chỉnh, bạn cũng sẽ cần một plugin "js" có thể mở ổ cắm bằng giao thức đó. Khi đã có sẵn, bạn có thể thêm plugin jquery của riêng mình để hoạt động như '$ .ajax' và' $ .get'. –

Trả lời

2

Phương thức ajax cơ bản và nhận được sử dụng các yêu cầu http thông thường của trình duyệt. Vì lý do bảo mật, các cuộc gọi loại ajax sẽ không bao giờ hoạt động với giao thức tùy chỉnh. Nếu bạn cố gắng phát triển một trang web không có trên máy chủ và sử dụng .ajax, bạn sẽ thấy nó sẽ không làm gì cả. Bạn sẽ phải bắt đầu từ đầu và tạo một trình xử lý yêu cầu tùy chỉnh hoàn toàn, không chỉ thay đổi một cái gì đó trong jQuery.

+0

Điều này đúng, nhưng bạn có thể thực hiện nó bằng cách thêm tiêu đề HTTP vào phản hồi NSURLProtocol của bạn: https://stackoverflow.com/questions/15224071/how-to-mock-ajax-call-with-nsurlprotocol/15234787# 15234787 –

2

Dưới đây là những gì tôi đã làm cho một giao thức callto:, mà làm việc trong Firefox 24 và IE 10 (tôi đã không kiểm tra bất kỳ trình duyệt khác):

Đệ Nhất - giao thức của bạn đã phải được đăng ký hay máy tính của bạn giành chiến thắng' t nhận ra nó. Thứ hai tạo liên kết ẩn trong đánh dấu của bạn với giao thức của bạn dưới dạng href. Khi tôi bấm vào một nút (#calltobutton), sau đó nó đặt giá trị của liên kết ẩn (#clicker) và sau đó nhấp vào nó, khiến trình duyệt thực hiện hành động.

Sau đó làm điều này:

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


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

Bây giờ, phương pháp cách nhấn vào liên kết callto là một nhưng lạ. Bạn có thể đọc thêm về điều đó trong this here thread.

1

này có muộn một chút, nhưng bạn có thể sử dụng https://github.com/ded/reqwest để làm điều này:

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

đã thử điều này từ safari di động dựa vào lược đồ URL tùy chỉnh và không thành công. Nhập trực tiếp lược đồ url hoặc chuyển hướng chính trình duyệt đã hoạt động. – stonedauwg

1

Chỉ cách tôi có thể có được điều này để làm việc là để làm một chuyển hướng cửa sổ trình duyệt bằng cách sử dụng DOM trong JS. Việc gọi từ JQuery hoặc thậm chí thư viện reqwestJS được đề cập trên trang này không hoạt động đối với tôi với safari trên thiết bị di động và ứng dụng lắng nghe các lược đồ URI tùy chỉnh.

Các vấn đề liên quan