标签: webviewclient

forOverrideUrlLoading在WebView for Android中未运行

-Edit:找到解决方案
- 在经过一番繁重的搜索后想出来 - 一个人(我的意思是一个人)说他们改为使用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.");
            }
        }
        else    
        {
            wView.loadUrl(url);
        }
        return true;
    }
});
view.loadUrl(urlAuthorize.toExternalForm());
Run Code Online (Sandbox Code Playgroud)

事情甚至是System.out.println("url"); (我用来调试)不运行!所以我的想法非常枯燥,找不到有类似问题的人.授权URL运行良好,我可以成功授权应用程序,但由于某种原因重定向到回调URL永远不会被截获.任何帮助将不胜感激,这是在我的onResume(),如果这很重要.

https android android-webview webviewclient

21
推荐指数
2
解决办法
6万
查看次数

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)
Run Code Online (Sandbox Code Playgroud)

有谁知道它是如何发生的?或者如何解决它?

android android-webview webviewclient

21
推荐指数
1
解决办法
1208
查看次数

适用于Facebook的Android WebView按钮

我正在尝试在Android WebView中使用类似Facebook的功能(项目规范不允许浏览器打开,或任何不在应用程序活动中).

因此,限制是它必须在WebView中完成.我已经设法使它成为一个对话框,并且用户点击按钮,它(WebView)成功(在同一视图中)重定向到facebooks登录页面.身份验证成功后,WebView(在对话框中)将重定向到带有标题的空白页面.

有趣的是,当用户离开空白对话框并再次单击类似按钮时,它的工作方式非常完美(喜欢和不同) - 它以某种方式保持身份验证活动.要解决空白页面,我尝试过/使用过以下内容:

  • 使用WebViewClientshouldOverloadUrlForwarding保持整个过程在同一个WebView对话框中.
  • 使用WebChromeClient正确执行JavaScript -登录后没有它不可能喜欢/不象.
  • 尝试使用setUserAgentString()模拟其他浏览器,如Chrome或Firefox
  • 尝试了SSL错误证书处理(API级别8)(at 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并手动处理.

所有这一切都没有结果.我非常感谢任何帮助!

android facebook webview facebook-like webviewclient

20
推荐指数
1
解决办法
2万
查看次数

在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 != null && headers.length > 0) {
            final String type = headers[0].getValue();
            final int semicolonIndex = type.indexOf(';');
            if (semicolonIndex != -1) {
                mimeType = type.substring(0, semicolonIndex).trim(); …
Run Code Online (Sandbox Code Playgroud)

android webview android-webview webviewclient

19
推荐指数
1
解决办法
2364
查看次数

什么是Android WebViewClient中的onPageFinished?

我正在尝试在我的网页加载完成后在Android WebView上执行操作.我设置我的WebView以使用WebViewClient来使用onPageFinished事件回调.但是,经过一些测试后,似乎还没等到页面上的所有JS都在我的onPageFinished代码触发之前完成加载.

Google文档说明了这一点:

public void onPageFinished (WebView view, String url)
Run Code Online (Sandbox Code Playgroud)

在API级别1中添加通知主机应用程序页面已完成加载.仅对主框架调用此方法.调用onPageFinished()时,渲染图片可能尚未更新.要获取新图片的通知,请使用onNewPicture(WebView,Picture).

参数

view正在启动回调的WebView.

url页面的网址.

1)onPageFinished只等待DOM加载吗?

2)有没有办法检测页面上的任何JS何时完成?如果是这样,我应该使用什么?

我没有在WebViewClient中看到任何可能用于此目的的内容.我不想添加延迟,因为我的用户可以在EDGE或LTE上.

android webview webviewclient

17
推荐指数
1
解决办法
8774
查看次数

如果证书是从特定的自签名CA签名的,请检查WebViewClient的onReceivedSslError()方法

我想覆盖onReceivedSslError()一个WebViewClient.在这里,我想检查error.getCertificate()证书是否是从自签名CA签名的,只有在这种情况下,才能调用handler.proceed().在伪代码中:

@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
    SslCertificate serverCertificate = error.getCertificate();

    if (/* signed from my self-signed CA */) {
        handler.proceed();
    }
    else {
        super.onReceivedSslError(view, handler, error);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的CA的公钥保存在名为的BouncyCastle资源中rootca.bks.我能怎么做?

android ca self-signed ssl-certificate webviewclient

16
推荐指数
3
解决办法
8189
查看次数

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());
Run Code Online (Sandbox Code Playgroud)

和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 shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return false;
        }
    }
Run Code Online (Sandbox Code Playgroud)

我在同一个webview中从Asset中加载两个HTML文件,它工作正常,但无法加载动态URL.

我在Google上找到了http://code.google.com/p/android/issues/detail?id=21177上的一些帖子

我的logcat告诉我

05-09 13:33:30.187: W/webcore(20054): java.lang.Throwable: EventHub.removeMessages(int what = 107) is not …
Run Code Online (Sandbox Code Playgroud)

android android-widget android-webview webviewclient

15
推荐指数
2
解决办法
2万
查看次数

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

我正在使用WebViewClient.shouldOverrideUrlLoading来捕获WebView中的任何链接点击.这大约有95%的时间都有效,但有时它根本就没有被调用.

我在这三种情况下都注意到了这一点:

  1. 当链接指向他们已经在的页面时.这个并不是什么大问题,并且报告了一个错误.
  2. 当页面仍在加载时,如果用户单击链接,则很少捕获该链接.它只会在没有打电话的情况下打开链接shouldOverrideUrlLoading.
  3. 随机.在过去几个月的实验中,我注意到有时它只是没有抓住它.这种情况很少见,但确实发生了.

现在我的问题主要是如何解决问题2,因为其他问题不是很重要.但是,如果有人解决了1或3,我很乐意听到它.

另外,我应该提一下,我已经尝试了不同的返回值,shouldOverrideUrlLoading并且我注意到总是返回true似乎具有最好的结果,但上述问题仍然发生.

android android-webview webviewclient

14
推荐指数
2
解决办法
1万
查看次数

在WebView中打开PDF

我想在我的WebView中打开一个PDF,我在这个论坛上找到并组合了代码.

但是,虽然我安装了多个PDF应用程序,包括Adobe Reader,但它仍然可以找到"找不到PDF应用程序".

这里的代码:

private class PsvWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);

            if (url.contains(".pdf")) {
                Uri path = Uri.parse(url); 
                Intent pdfIntent = new Intent(Intent.ACTION_VIEW);
                pdfIntent.setDataAndType(path, "application/pdf");
                pdfIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

                try
                {
                    startActivity(pdfIntent);
                }
                catch(ActivityNotFoundException e)
                {
                    Toast.makeText(PsvWebViewActivity.this, "No PDF application found", Toast.LENGTH_SHORT).show();
                }
                catch(Exception otherException)
                {
                    Toast.makeText(PsvWebViewActivity.this, "Unknown error", Toast.LENGTH_SHORT).show();
                }

            }

            return true;
        }   } }
Run Code Online (Sandbox Code Playgroud)

pdf android toast android-intent webviewclient

14
推荐指数
2
解决办法
6万
查看次数

通过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: " + failingUrl + ", error code: " + errorCode + " [" + description + "]");
        }
    });


    webView.loadUrl("http://m.vooglemoogle.com" );
}



}
Run Code Online (Sandbox Code Playgroud)

结果如下:

03-29 13:40:27.005: DEBUG/TAG(10948): …
Run Code Online (Sandbox Code Playgroud)

android android-webview webviewclient

13
推荐指数
2
解决办法
2万
查看次数