标签: webviewclient

Android webview在调用loadurl时启动浏览器

我创建了Activity一个标题和Web视图LinearLayout.在onResume()它调用的方法中webView.loadUrl(url).问题是,活动首先显示标题,屏幕的其余部分为空白,然后启动设备浏览器以及URL的页面.我想看到的是页面显示在WebView标题下方.可能是什么问题呢?

编辑:好的,做了一些进一步的搜索,发现了这个:

单击URL将打开默认浏览器

它指向这里WebView教程.

只需实现Web客户端并进行设置即可.

android android-webview webviewclient

449
推荐指数
8
解决办法
18万
查看次数

setWebViewClient与setWebChromeClient有什么区别?

Android中的setWebViewClientvs. 之间的区别是什么setWebChromeClient

android webviewclient webchromeclient

219
推荐指数
4
解决办法
12万
查看次数

WebViewClient和WebChromeClient是互斥的吗?

从这个很好的解释有关之间的差异WebViewClient,并WebChromeClient似乎如果你使用一个,你不应该使用其他的(对于相同的WebView对象).

我的理解是否正确?

如果没有,何时会同时使用WebViewClient WebChromeClient同一个WebView对象?

是否存在仅使用两者WebViewClient WebChromeClient同一WebView对象才能实现某个目标的情况的示例?

android webview webviewclient webchromeclient

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

在WebViewClient中启用常规JavaScript

在谷歌搜索答案时,似乎我不是唯一一个遇到似乎无法解决的问题的人.

我已经设法使用自定义WebViewClient创建WebView - 这使得我可以拥有processdialog并在无法加载URL时显示错误消息.

但这会产生JavaScript问题.我正在加载的URL有一些JavaScript,它改变了一些HTML元素的CSS样式(显示或隐藏元素)或重定向到另一个位置onclick - 或者甚至想要显示一个警告框.但是通过使用WebViewClient,这些都不起作用.

这是我加载页面的方式:

public void loadUrl(String url)
{
    final ProgressDialog dialog = ProgressDialog.show(myActivity.this, "",  getString(R.string.loading), true);
            final WebView myWebView = (WebView) findViewById(R.id.webview);
            myWebView.setVerticalScrollBarEnabled(false);
            myWebView.setHorizontalScrollBarEnabled(false);
            WebSettings webSettings = myWebView.getSettings();
            webSettings.setJavaScriptEnabled(true);                                         


            myWebView.setWebViewClient(new WebViewClient() 
            {
                @Override
                public boolean shouldOverrideUrlLoading(WebView view, String url) 
                {
                    Toast.makeText(myActivity.this, url, Toast.LENGTH_SHORT).show(); //Debugging purposes
                if (url.endsWith(".mp4")) 
                {
                        Intent intent = new Intent(Intent.ACTION_VIEW);
                        intent.setDataAndType(Uri.parse(url), "video/mp4");
                        view.getContext().startActivity(intent);  
                }
                else
                {                           
                        view.loadUrl(url);
                    }

                    return true;
                }

                public void onPageFinished(WebView view, String url) 
                {
                    //Toast.makeText(myActivity.this, "Oh no!", Toast.LENGTH_SHORT).show(); …
Run Code Online (Sandbox Code Playgroud)

android webview webviewclient

62
推荐指数
3
解决办法
7万
查看次数

拦截并覆盖来自WebView的HTTP请求

我的应用程序中有一个WebView,其中一些站点被打开(总是相同的,它是我自己的页面).该站点有一些JS代码,可以从远程主机加载一些图像.

我想截取对这些图像的请求(通过URL模式)并返回我自己的内容(即另一个图像),或者根据内部应用程序逻辑保持请求不变.

有可能吗?

编辑:目前的问题状态......

WebView有能力设置WebViewClient(如Axarydax所述).WebViewClient有两个有用的方法

  • shouldOverrideUrlLoading
  • onLoadResource

shouldOverrideUrlLoading能够拦截任何URL加载,如果加载是由页面交互触发的(即单击页面上的链接,WebView.loadURL("")不会触发此方法).它还可以通过返回false来取消URL加载.这种方法不可用,导致'它无法拦截页面资源的加载(和图像,我需要拦截的是这样的页面资源).

onLoadResource每次加载页面资源(和图像!thx到jessyjones)时都会触发,但是没有办法取消它.这使得这种方法也不适合我的任务.

android android-webview webviewclient

60
推荐指数
4
解决办法
10万
查看次数

Android 4.4在WebView的onReceivedError中给出了ERR_CACHE_MISS错误

我的布局中有一个webview.默认情况下,会在其中打开搜索表单.在搜索时,搜索表单下方会显示一个列表部分.如果单击列表中的任何链接,则会打开详细信息页面.现在我想控制webview的后退导航.我将此代码放在Activity中.

    @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {

            Log.d("TYPE", TYPE);

            WebView myWebView = null;
            if (TYPE.equalsIgnoreCase("REPORT_ACTIVITY"))
                myWebView = reportView;

            if (TYPE.equalsIgnoreCase("FEEDBACK_ACTIVITY"))
                myWebView = feedbackView;

            if (myWebView != null)
                // Check if the key event was the Back button and if there's history
                if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) {
                    myWebView.goBack();
                    return true;
                }
            // If it wasn't the Back key or there's no web page history, bubble up
            // to the default
            // system behavior (probably exit the activity) …
Run Code Online (Sandbox Code Playgroud)

android webview chromium webviewclient

30
推荐指数
3
解决办法
6万
查看次数

Android - 如何在API级别4上拦截android WebViewClient中的表单POST

我有这样的WebViewClient依恋WebView:

webView.setWebViewClient(new MyWebViewClient());
Run Code Online (Sandbox Code Playgroud)

这是我的实现MyWebViewClient:

private class MyWebViewClient extends WebViewClient {

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
      webView.loadUrl(url);
      return true;
    }    
}
Run Code Online (Sandbox Code Playgroud)

我给了WebView一个URL来加载via loadUrl().如果我a href...在页面中有一个link(),我的shouldOverrideUrlLoading方法被调用,我可以拦截链接点击.

但是,如果我有一个方法的表单,则不调用POSTshouldOverrideUrlLoading方法.

我在这里注意到了一个类似的问题:http://code.google.com/p/android/issues/detail?id = 9122这似乎建议覆盖postUrl我的WebView.但是,此API仅从API级别5开始提供.

如果我在API级别4,我该怎么办?有没有其他方法来拦截表格帖子?

forms post android webviewclient

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

使用Android WebViewClient启用特定的SSL协议

我的应用程序使用WebViewClient与服务器建立SSL连接.服务器配置为仅接受TLSv1.1及更高版本的协议.

1)如何检查哪些SSL协议是a)支持和b)在设备上使用Android WebViewClient时默认启用.
2)如何为我的应用程序中使用的Android WebViewClient实例启用特定的SSL协议.

在其中一个运行Android 4.3的测试设备上,WebViewClient抛出onReceivedError回调,其描述为"无法执行SSL握手"
Chrome日志如下:
01-29 15:58:00.073 5486 5525 W chromium_net:external/chromium/net/http/http_stream_factory_impl_job.cc:865:[0129/155800:警告:http_stream_factory_impl_job.cc(865)]回到SSLv3,因为主机是TLS不容忍的:10.209.126.125:443 01-29 15:58:00.083 5486 5525 E chromium_net:external/chromium/net/socket/ssl_client_socket_openssl.cc:792:[0129/155800:错误:ssl_client_socket_openssl.cc(792)]握手失败; 返回0,SSL错误代码5,net_error -107

我的应用程序还使用HttpClient和HttpsUrlConnection类来设置SSL连接.在使用这些类时,我能够使用SSLSocket API来启用特定协议. http://developer.android.com/reference/javax/net/ssl/SSLSocket.html#setEnabledProtocols(java.lang.String中[])

我需要对WebViewClient做同样的事情.

java ssl https android webviewclient

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

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

我建立一个WebView显示网站.该网站包含没有target="_blank"属性的链接和一些带有它的链接.

我需要打开target外部标准设备浏览器中定义的链接和WebView中没有它的链接.

我正在使用一个WebViewClient,我尝试了这个功能,但我的所有链接仍在以下内容中打开WebView:

备选方案1:

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {

    return super.shouldOverrideUrlLoading(view, url);        
}
Run Code Online (Sandbox Code Playgroud)

备选方案2:

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {

    view.loadUrl(url);
    return true;        
}
Run Code Online (Sandbox Code Playgroud)

有人知道如何在外部打开空白链接吗?

谢谢!

PS:为了避免误解:我不能使用这种方法,因为我知道链接的唯一方法应该是外部打开target属性.

android android-webview webviewclient

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

WebView loadUrl只能工作一次

编辑:几年前我参与了这个项目,不幸的是我无法验证在给定的场景中是否有任何答案.

我很难用一个WebView来显示我们的博客.在启动时,它工作得很好.用户可以导航到WebView中的不同链接.要返回博客,WebView外部有一个按钮,可以再次加载主博客站点.

问题是,第二次调用loadUrl后没有加载任何内容.这是我的代码:

private WebView wv;

        @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

            this.setContentView(R.layout.blog);

    wv = (WebView) findViewById(R.id.blog_webview);
    wv.getSettings().setJavaScriptEnabled(true);
    wv.setWebViewClient(new WebViewClient() {

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon {
            MyLog.logDump("onPageStarted: " + url);
        }

        @Override
        public void onPageFinished(WebView view, String url) {
                            MyLog.logDump("onPageFinished: " + url);
        }
    });

    wv.loadUrl(Constants.BLOG_URL);
}
Run Code Online (Sandbox Code Playgroud)

我的OnClickListener调用的函数如下:

    public void reLoadUrl() {
        wv.loadUrl(Constants.BLOG_URL);

}
Run Code Online (Sandbox Code Playgroud)

但是,尽管onPageFinished和onPageStarted中的日志显示我的wv.loadUrl正在被调用并且它正在加载正确的url,但webview中的内容本身并没有改变.我已经尝试清除缓存,历史,视图,尝试过不同的WebSettings,试图使用webView.goBack() - 而不是结果.这些想法也不起作用:android中的奇怪的webview goBack问题

有时,reLoadUrl会显示所需的结果 - 但一旦失败,它就再也无法工作了.有什么想法会发生什么?我确实尝试过阅读WebView代码但我找不到任何可以帮助我的东西.

我唯一可以补充的是,我们正在使用一些严重依赖于webViews的广告网络 - 我试图将它们关闭,但我没有删除这些库,所以我不确定它们不是罪魁祸首.

有任何想法吗??

android webview webviewclient

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