在PhoneGap上的iOS中使用了一种非常常见的技术:拦截HTTP(或URL)协议,以便从其他来源(例如从缓存)为基于PhoneGap的应用程序提供内容。您只需使用NSURLProtocol and co实现新协议。
所以你可以介绍一下可以从PhoneGap内的JavaScript调用的cache://server1/lookup1.json
类型的URL(方案是'缓存'),它将到达您的NSURLProtocol实现,以便您可以例如在询问真实服务器之前先查看本地缓存。我想这是如何实现即使在离线模式下也可以运行的应用程序(当然是在有限的时间内)。
现在的问题是:Android上是否存在类似的可能性? 我知道没有NSURLProtocol的直接版本(甚至不能 - 你通常在Java / Dalvik运行时和PhoneGap Web浏览器组件作为本机组件运行)。因此,我可能正在寻找更具创造性的方法来拦截...可能在JavaScript中,也许在PhoneGap / Cordova Android代码中,也许是浏览器组件的一些原生插件。
我会很感激这里的任何提示,我实际上需要在iOS上移植基于PhoneGap的应用程序,以便在Android上运行。
答案 0 :(得分:1)
@Ales你可以轻松拦截任何平台上的任何方案,无论其iOS或Android使用自定义JavaScript功能。 Phonegap webview不会打开以javascript开头的网址,而是跳过它以便进一步处理javscript代码本身。我已为此准备了一个小型的工作演示。希望它符合您的要求。
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<script>
$(function(){
$('a').click(function(event) {
var hrefValue = $(this).attr('href');
var pattern = /^((cache|myapp):\/\/)/; // Add schemes to this list according to your need. i have added two
if(pattern.test(hrefValue)) {
event.preventDefault();
var tempArray = hrefValue.split('://');
var urlScheme = tempArray[0];
var urlPath = tempArray[1];
// perform specfic actions based on scheme
if(urlScheme == 'cache') {
$.getJSON( 'http://'+urlPath, function( data ) {
$("#response").html(JSON.stringify(data));
});
}
}
});
</script>
<style>
a { display:block; }
</style>
<a href="cache://ip.jsontest.com">Cache Scheme</a>
<a href="http://ip.jsontest.com">Http Scheme</a>
<div id="response"></div>