gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:35:14 25 4
gpt4 key购买 nike

在 iOS PhoneGap 上使用了一种非常常见的技术:拦截 HTTP(或 URL)协议(protocol),以便从其他来源(例如缓存)为基于 PhoneGap 的应用程序提供内容。您只需使用 NSURLProtocol and co 实现新协议(protocol).

所以你可以介绍例如cache://server1/lookup1.json 可以从 PhoneGap 中的 JavaScript 调用的 URL 类型(方案是“缓存”),它将到达您的 NSURLProtocol 实现,以便您可以,例如在询问真实服务器之前查看本地缓存。我想这是实现即使在离线模式下也能运行的应用程序(当然是在有限的时间内)的好方法。

现在的问题是:Android 上是否有类似的可能性?我知道没有 NSURLProtocol 的直接版本(甚至不能——你通常在 Java/Dalvik 运行时,PhoneGap Web 浏览器组件作为 native 组件运行)。所以我可能正在寻找更有创意的方式来拦截它……可能是在 JavaScript 中,可能是在 PhoneGap/Cordova Android 代码中,也可能是浏览器组件的一些 native 插件。

如果有任何提示,我将不胜感激,我实际上需要将在 iOS 上以这种方式构建的基于 PhoneGap 的应用程序移植到 Android。

最佳答案

@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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com