Articles of webviewclient

stopLoading()真正做了什么?

是的,我知道stopLoading()的文档说“ 停止当前的负载”。 但是当我尝试使用它在加载新页面之前停止加载当前正在进行的页面时,它似乎没有按照需要运行 : 07-24 12:53:30.177: V/WebView.loadUrl: http://www.google.com 07-24 12:53:30.227: V/WebViewClient.onPageStarted: http://www.google.com ===> WebView.stopLoading() called here <==== 07-24 12:53:31.917: V/WebView.loadUrl: http://www.stackoverflow.com 07-24 12:53:32.697: V/WebViewClient.onPageFinished: http://www.google.com 07-24 12:53:32.767: V/WebViewClient.onPageStarted: http://www.stackoverflow.com 07-24 12:53:33.587: V/WebViewClient.onPageFinished: http://www.stackoverflow.com 正如您在日志中看到的那样,第一个loadUrl() WebViewClient.onPageFinished()被调用,尽管之前大约1秒钟调用了WebView.stopLoading() 。 这是为什么? stopLoading()真正做了什么?

在加载页面时,shouldOverrideUrlLoading不起作用/捕获链接点击次数

我正在使用WebViewClient.shouldOverrideUrlLoading来捕获WebView中的任何链接点击。 这大约有95%的时间都有效,但有时它根本就没有被调用。 我在这三种情况下都注意到了这一点: 当链接指向他们已经在的页面时。 这个并不是什么大问题,并且报告了一个错误 。 在页面仍在加载时,如果用户单击链接,则很少捕获该链接。 它只会在没有调用shouldOverrideUrlLoading情况下打开链接。 随机。 在过去几个月的实验中,我注意到有时它只是没有抓住它。 这种情况很少见,但确实发生了。 现在我的问题主要是如何解决问题2,因为其他问题不是很重要。 但是,如果有人解决了1或3,我很乐意听到它。 另外,我应该提一下,我在shouldOverrideUrlLoading尝试了不同的返回值,我注意到总是返回true似乎有最好的结果,但上面的问题仍然会发生。

通过WebView.loadURL()指定不存在的URL时,WebViewClient.onPageStarted()调用两次

这是我的代码 public class Main extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); WebView webView = (WebView)findViewById(R.id.webView); // Assign webclient. webView.setWebViewClient(new WebViewClient( ) { @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { Log.d(“TAG”, url); } @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { Log.d(“TAG”, “failed: ” + […]

Android:在设置WebViewCore之前不支持EventHub.removeMessages(int what = 107)

我在Dialog Activity中实现了WebView,我正在将简单的url加载到webview中。 我的Webview设置如下 wbView = (WebView) findViewById(R.id.wbView); wbView.setKeepScreenOn(true); wbView.getSettings().setJavaScriptEnabled(true); wbView.getSettings().setDomStorageEnabled(true); wbView.getSettings().setBuiltInZoomControls(true); wbView.setInitialScale(100); // wbView.getSettings().setUseWideViewPort(true); wbView.setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY); wbView.setWebViewClient(new MyWebViewClient()); 和MyWebViewClient()包含 private class MyWebViewClient extends WebViewClient { @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); prgBar.setVisibility(View.GONE); } @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { Log.e(“Error VAGARO”, error.toString()); prgBar.setVisibility(View.GONE); handler.proceed(); } @Override public boolean […]

在Android WebViewClient中考虑onPageFinished的是什么?

我正在尝试在我的网页完成加载后在Android WebView上执行操作。 我设置我的WebView以使用WebViewClient来使用onPageFinished事件回调。 但是,经过一些测试后,似乎还没等到页面上的所有JS都在我的onPageFinished代码触发之前完成加载。 Google文档说明了这一点: public void onPageFinished (WebView view, String url) 在API级别1中添加通知主机应用程序页面已完成加载。 仅为主框架调用此方法。 调用onPageFinished()时,渲染图片可能尚未更新。 要获取新图片的通知,请使用onNewPicture(WebView,Picture)。 参数 view正在启动回调的WebView。 url页面的url。 1)onPageFinished只等待DOM加载吗? 2)有没有办法检测页面上的任何JS何时完成? 如果是这样,我应该使用什么? 我没有在WebViewClient中看到任何可能用于此目的的内容。 我不想添加延迟,因为我的用户可以在EDGE或LTE上。

在WebViewClient中覆盖shouldInterceptRequest时系统崩溃

目标: 覆盖WebView发出的所有请求并自行发出请求(最终设置代理)。 码: @Override public WebResourceResponse shouldInterceptRequest(WebView view, String url) { if (url == null || url.trim().equals(“”)) return null; final DefaultHttpClient httpClient = new DefaultHttpClient(); httpClient.getConnectionManager().closeExpiredConnections(); final HttpUriRequest httpRequest = new HttpGet(url); try { final HttpResponse response = httpClient.execute(httpRequest); final Header[] headers = response.getHeaders(CONTENT_TYPE); String mimeType = “”; String encoding = “”; if (headers != […]

Android – 使用外部浏览器在WebView中打开目标_blank链接

我构建了一个显示网站的WebView 。 该网站包含没有target=”_blank”属性的链接和一些带有它的链接。 我需要打开外部标准设备浏览器中定义的target链接和WebView中没有它的链接。 我正在使用WebViewClient ,我尝试使用此function但仍然在WebView中打开所有链接: 备选方案1: @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { return super.shouldOverrideUrlLoading(view, url); } 备选方案2: @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } 有人知道如何在外部打开空白链接吗? 谢谢! PS:为了避免误解:我不能使用这种方法,因为我知道链接应该外部打开的唯一方法是target属性。

java.io.IOException的WebView崩溃:关闭失败:EIO(I / O错误)libcore.io.IoUtils.close(IoUtils.java:41)

我在Android 4.0 / 4.1上有用户上传崩溃日志,但我无法重现它。日志是这样的: java.io.IOException: close failed: EIO (I/O error) libcore.io.IoUtils.close(IoUtils.java:41) java.io.FileInputStream.close(FileInputStream.java:121) android.webkit.JWebCoreJavaBridge.nativeServiceFuncPtrQueue(Native Method) android.webkit.JWebCoreJavaBridge.handleMessage(JWebCoreJavaBridge.java:113) android.os.Handler.dispatchMessage(Handler.java:99) android.os.Looper.loop(Looper.java:137) android.webkit.WebViewCore$WebCoreThread.run(WebViewCore.java:949) java.lang.Thread.run(Thread.java:856) cause by: libcore.io.ErrnoException: close failed: EIO (I/O error) libcore.io.Posix.close(Native Method) libcore.io.BlockGuardOs.close(BlockGuardOs.java:75) libcore.io.IoUtils.close(IoUtils.java:38) java.io.FileInputStream.close(FileInputStream.java:121) android.webkit.JWebCoreJavaBridge.nativeServiceFuncPtrQueue(Native Method) android.webkit.JWebCoreJavaBridge.handleMessage(JWebCoreJavaBridge.java:113) android.os.Handler.dispatchMessage(Handler.java:99) android.os.Looper.loop(Looper.java:137) android.webkit.WebViewCore$WebCoreThread.run(WebViewCore.java:949) java.lang.Thread.run(Thread.java:856) 有谁知道它是如何发生的?或者如何解决它?

适用于Facebook的Android WebView按钮

我正在尝试在Android WebView中使用类似Facebook的function(项目规范不允许浏览器打开,或任何不在应用程序活动中)。 因此,限制是它必须在WebView中完成。 我已经设法使它成为一个对话框,并且用户点击按钮,它(WebView)成功(在同一视图中)重定向到facebooks登录页面。 身份validation成功后, WebView (在对话框中)将重定向到带有标题的空白页面 。 有趣的是,当用户离开空白对话框并再次单击类似按钮时,它的工作方式非常完美(喜欢和不同) – 它以某种方式保持身份validation活动。 要解决空白页面,我尝试过/使用过以下内容: 使用WebViewClient和shouldOverloadUrlForwarding将整个进程保持在同一个WebView对话框中。 使用WebChromeClient正确执行JavaScript – 在登录后没有它可能不喜欢/不同。 尝试使用setUserAgentString()来模拟Chrome或Firefox等其他浏览器 尝试了SSL错误证书处理(API级别8)(在WebViewClient ) @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { handler.proceed(); } 使用(以及所有可能的组合) webView.getSettings().setAppCacheEnabled(true); webView.getSettings().setJavaScriptEnabled(true); webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); 尝试使用CookieSyncManager , CookieManager持久存储cookie并手动处理。 所有这一切都没有结果。 我非常感谢任何帮助!

forOverrideUrlLoading在WebView for Android中未运行

-Edit:find解决方案 – 在经过一番繁重的搜索后想出来 – 一个人(我的意思是一个人)说他们改为使用onPageLoad(); 这完全符合我的目的。 区别在于onPageLoad()的运行时间晚于shouldOverrideUrlLoading,但它对我的代码没有影响。 我正在尝试使用OAuth为Android应用程序设置Twitter授权,到目前为止我可以成功将用户发送到授权URL,但是,我现在要做的是拦截重定向到回调(这只是导致404错误,我们的回调URL不会在我们的服务器上有关联的页面)。 我试图做的是检查URL是否是我们的回调,然后从URL中提取OAuth Verifier。 我使用以下代码设置我的WebView: view = (WebView)findViewById(R.id.twitterWbVw); view.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView wView, String url) { String urlHolder; String[] verifExtrctr; urlHolder = url.substring(0, url.indexOf(‘?’)); System.out.println(“url”); if(urlHolder.equalsIgnoreCase(CALLBACK_URL)) { verifExtrctr = urlHolder.split(“?”); verifExtrctr = verifExtrctr[2].split(“=”); if(verifExtrctr[0].equalsIgnoreCase(“oauth_verifier”)) { params[5] = verifExtrctr[1]; return true; } else { System.out.println(“Inocorrect callback URL format.”); […]