是否有可能仅使用Androids WebView进行渲染,而不是使用所有通信内容?我更喜欢自己处理通信,例如Apache HttpClient,它具有处理证书等所有可能性。 但是我遇到了从WebView点击/执行的链接和表单的问题。我使用自定义WebViewClient和shouldInterceptRequest拦截这些请求,并调用我自己的通信组件来获取HTML。如果我的通信组件遵循重定向,我如何通知我的WebView有关当前基本URL的信息?到目前为止,HTML中的相对路径不起作用,因为WebView仍然认为原始请求中的旧基本URL仍处于活动状态,我只能将WebResourceResponse传递回仅包含HTML数据的WebView。 是否有任何其他组件可以在不关心通信的情况下进行渲染?如果没有,我该怎么做才能自定义WebView以适应我的用例?谢谢!
祝你好运 比约恩
答案 0 :(得分:0)
您可以使用webview.getSettings()。setBlockNetworkLoads(true)来实现此目的。
http://developer.android.com/reference/android/webkit/WebSettings.html#setBlockNetworkLoads(boolean)
答案 1 :(得分:0)
如果其他人需要与我相似的奇怪设置,我会回答我自己的问题以提供更多信息:-) user3431672提供的答案是解决方案的一部分。这可确保WebView不会从Internet加载任何内容。
另外,我创建了一个自定义WebViewClient并实现了shouldInterceptRequest
,它至少会触发所有GET请求。如果没有遵循重定向,我自己的通信组件将获取数据并返回带WebResourceResponse
的方法。如果在获取请求的数据期间存在重定向,则我不会返回WebResourceResponse
。相反,我致电loadDataWithBaseURL(...)
并使用shouldInterceptRequest()
返回null
方法。
为了能够处理POST请求,我必须实现一个自定义类来注入JavaScript并通过addJavaScriptInterface()
将其添加到WebView。在这个类中,我在所有button
元素上注册一个EventListener,并且在单击时,遍历所有input
元素(以及我需要的任何其他元素)来解析我的数据以获取POST请求。然后,我的通信组件处理POST请求,并通过loadDataWithBaseURL(...)
再次加载响应。
希望这有助于某人。