有没有办法在Android上的PhoneGap中拦截HTTP请求?

时间:2014-04-03 12:20:33

标签: android ios cordova

在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上运行。

1 个答案:

答案 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>