我想要一个HTML/javascript
应用程序,在WebView
中运行,以进行由Java
代码处理的AJAX
调用。
理想的做法是拦截调用(简单,只需使用shouldOverrideUrlLoading()
)并“返回”一些数据。
然而,除了使用loadUrl()
调用javascript
函数之外,我没有找到一种方法来“返回”对WebView
的响应。
这对我不起作用,因为HTML/javascript
应用程序是一个我无法控制的下拉式应用程序。就HTML/javascript应用程序而言,它只是执行AJAX
调用并接收一些数据。
对此有什么想法吗?
4条答案
按热度按时间shyt4zoc1#
好消息大家:在API级别11中,他们将
shouldInterceptRequest
方法放入WebViewClient
类中。它也会在WebView
触发器内的应用程序请求时触发。您可以如下所示覆盖它:Android参考:
public WebResourceResponseshouldInterceptRequest(WebView view,String url)
自:API 11级
通知宿主应用程序有资源请求,并允许应用程序返回数据。如果返回值为null,则
WebView
将照常加载资源。否则,将使用返回的响应和数据。注意:此方法由网络线程调用,因此客户端在访问私有数据时应谨慎。参数
view
请求资源的WebView
。url
资源的原始URL。返回
包含响应信息的
WebResourceResponse
,如果WebView
应自行加载资源,则为null。也检查WebResourceResponse。
希望这能帮上忙。
nkoocmlb2#
您可以使用JavascriptInterface拦截 AJAX 调用沿着JQuery方法
ajaxStart
和ajaxComplete
,方法如下:下面是
AjaxHandler
在Activity
中的使用方式:主要思想来自here,并进行了一些调整。
虽然现在提交答案有点晚了,但希望这也能帮助到其他人!
avwztpqn3#
最后我还是用了题中所描述的方法;
我截获了一些具体的请求,例如:然后
foo://bar/get/1?callback=foobar
解析URL
并使用实际数据调用JavaScript回调函数。回调函数是在
URL
的查询部分定义的,所以在上面的例子中是:foobar();
调用该函数很容易,只需用途:
yourWebView.loadUrl("javascript:foobar('somedata')");
anauzrmj4#
现在是2023年,我遇到了同样的问题。
我使用
shouldInterceptRequest()
方法解决了这个问题。黑客是通过过滤被拦截的请求并相应地采取行动。shouldInterceptRequest()
方法拦截在WebView
上发出的所有请求。在我的例子中,我知道正在发出的确切请求,以及与请求相关联的确切URL。在上面的代码片段中,您首先检查请求URL是否与您正在查找的模式匹配。例如,如果您对
http://example.com/app/resource?message=hello
这样的URL感兴趣,则以上述方式进行过滤将阻止您对http://example.com/favicon.ico
这样的URL进行操作。接下来的事情是现在检查您在URL过滤组中期望的确切URL。
最后,我返回
null
,让WebView
正常处理请求。