iOS 中在 PhoneGap 上使用了一种相当常见的技术:拦截 HTTP(或 URL)协议(protocol),以便从其他来源(例如,来自缓存)为基于 PhoneGap 的应用程序提供内容。您只需使用 NSURLProtocol and co 实现新协议(protocol).
所以你可以介绍例如cache://server1/lookup1.json 类型的 URL(方案是“缓存”),可以从 PhoneGap 中的 JavaScript 调用,它将到达您的 NSURLProtocol 实现,以便您可以例如在询问真实服务器之前查看本地缓存。我想这是一种很好的方式来实现即使在离线模式下也可以运行的应用程序(当然是在有限的时间内)。
现在的问题是:Android 上是否有类似的可能性?
我知道没有 NSURLProtocol 的直接版本(甚至不能——你通常在 Java/Dalvik 运行时中,PhoneGap Web 浏览器组件作为 native 组件运行)。所以我可能会寻找更有创意的方法来拦截它......也许在 JavaScript 中,也许在 PhoneGap/Cordova Android 代码中,也许是浏览器组件的一些 native 插件。
我会很感激这里的任何提示,我实际上需要将在 iOS 上以这种方式构建的基于 PhoneGap 的应用程序移植到 Android。
Best Answer-推荐答案 strong>
@Ales 您可以使用自定义 JavaScript 函数轻松拦截任何平台中的任何方案,无论是 iOS 还是 Android。 Phonegap webview 不会打开以 javascript 开头的 url,而是跳过它以进一步处理 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>
关于android - 有没有办法在 Android 上的 PhoneGap 中拦截 HTTP 请求?,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/22837624/
|