Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android WebView仅用于渲染,不用于通信_Android_Webview_Android Webview - Fatal编程技术网

Android WebView仅用于渲染,不用于通信

Android WebView仅用于渲染,不用于通信,android,webview,android-webview,Android,Webview,Android Webview,有没有可能只将Androids WebView用于渲染,而不用于进行所有通信?我更愿意自己处理通信,例如使用ApacheHttpClient以及处理证书时的所有可能性,等等。 但是我在WebView中单击/执行链接和表单时遇到了问题。我用一个定制的WebViewClient截取这些请求,应该进行InterceptRequest并调用我自己的通信组件来获取HTML。如果我的通信组件遵循重定向,我如何通知我的WebView当前的基本URL?到目前为止,HTML中的相对路径不起作用,因为WebView

有没有可能只将Androids WebView用于渲染,而不用于进行所有通信?我更愿意自己处理通信,例如使用ApacheHttpClient以及处理证书时的所有可能性,等等。 但是我在WebView中单击/执行链接和表单时遇到了问题。我用一个定制的WebViewClient截取这些请求,应该进行InterceptRequest并调用我自己的通信组件来获取HTML。如果我的通信组件遵循重定向,我如何通知我的WebView当前的基本URL?到目前为止,HTML中的相对路径不起作用,因为WebView仍然认为原始请求中的旧基URL仍然处于活动状态,并且我只能将WebResourceResponse传递回只包含HTML数据的WebView。 是否有其他组件可以在不考虑通信的情况下进行渲染?如果没有,我必须做些什么来定制WebView以适合我的用例?谢谢

致意
Bjoern

您可以使用webview.getSettings().setBlockNetworkLoads(true)来实现这一点


如果其他人需要与我类似的奇怪设置,我将回答我自己的问题以提供更多信息:-) user3431672提供的答案是解决方案的一部分。这确保WebView不会从Internet加载任何内容

此外,我还创建了一个自定义WebViewClient,并实现了至少对所有GET请求触发的
shouldInterceptRequest
。我自己的通信组件获取数据,如果没有遵循重定向,则返回带有
WebResourceResponse
的方法。如果在获取请求数据期间发生重定向,我不会返回
WebResourceResponse
。相反,我调用
loadDataWithBaseURL(…)
并返回
shouldInterceptRequest()
方法和
null

为了能够处理POST请求,我必须实现一个自定义类来注入JavaScript,并通过
addJavaScriptInterface()
将其添加到WebView。在这个类中,我在所有
按钮
元素上注册了一个EventListener,当单击时,遍历所有
输入
元素(以及我需要的任何其他元素),为POST请求解析我的数据。然后,我的通信组件处理POST请求,并通过
loadDataWithBaseURL(…)
再次加载响应

希望这对别人有帮助