【问题标题】:Webview client not Listening shouldOverrideUrlLoadingWebview 客户端不监听 shouldOverrideUrlLoading
【发布时间】:2012-05-19 17:35:06
【问题描述】:

在我的应用程序中,第一次有一个登录屏幕显示在网络视图中。在该屏幕中将出现一个弹出窗口,其中包含用户名和密码。在按下登录按钮时提供详细信息后,提交用户名和密码,并且它将调用一个用于用户名和密码验证的 php 代码,该代码将重定向到一个链接,该链接将在 web 视图中重新加载。加载此 URL 后,我必须侦听 URL,如果 URL 符合某些考虑,我想完成 webview 活动并继续下一个活动。

问题是当我无法收听登录后生成的 URL 时。由于 Login 按钮没有登录,所以 shouldOverrideUrlLoading 没有调用。我尝试使用 onPageFinished、onLoadResource、onPageStarted。但只有少数设备调用这些函数。

我想在按下登录按钮后获取 URL。有没有其他方法可以解决这个问题。

这是我的代码:

public class AndroidTestActivity extends Activity {
/** Called when the activity is first created. */
WebView mWebView;
Context ctx;
String str = "";

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    ctx = this;

    mWebView = (WebView) findViewById(R.id.mywebview);
    mWebView.setWebViewClient(new MyWebClient());
    mWebView.setScrollBarStyle(WebView.SCROLLBARS_INSIDE_OVERLAY);
    WebSettings webSettings = mWebView.getSettings();
    webSettings.setSavePassword(false);
    webSettings.setSaveFormData(false);
    webSettings.setJavaScriptEnabled(true);

    mWebView.setWebChromeClient(new WebChromeClient() {
        @Override
        public boolean onJsAlert(WebView view, String url, String message,
                android.webkit.JsResult result) {
            // Required functionality here
            return super.onJsAlert(view, url, message, result);
        }
    });
    mWebView.loadUrl("http://This is my log in screen");


}

class MyWebClient extends WebViewClient {
    MyWebClient() {
        Log.e("test", "Inside WebViewClient");
    }

    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        Log.e("onPageStarted", url);
        str = str + "onPageStarted : " + url + "\n";
    }

    public void onLoadResource(WebView view, String url) {
                    Log.e("onLoadResource", url);
        str = str + "onLoadResource : " + url + "\n";
    }

    public void onPageFinished(WebView view, String url) {
        Log.e("onPageFinished", url);
        str = str + "onPageFinished : " + url + "\n";
    }

    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        Log.e("shouldOverrideUrlLoading", url);
        str = str + "shouldOverrideUrlLoading : " + url + "\n";
        return true;
    }

}

}

谢谢问候, 狙击手。

【问题讨论】:

    标签: android webview


    【解决方案1】:

    如果您可以访问登录屏幕 html 页面并且可以更改它,那么 我会建议你使用 javaScriptInterface 来处理你的登录按钮的 onClickListener。

    下面的链接显示了使用 javascriptInterface 获取 html 按钮单击并从该 clickEvent 调用 android 函数的方法。

    using javascript in android webview

    希望这对您有所帮助...

    【讨论】:

    • 非常感谢。你节省了我的时间。但在完成活动后,一个对话框显示“使用对话框完成操作”以及设备中的浏览器列表。我怎样才能避免它。
    猜你喜欢
    • 1970-01-01
    • 2015-09-14
    • 1970-01-01
    • 2016-10-03
    • 2016-06-25
    • 2010-10-28
    • 2010-10-21
    • 2021-07-06
    • 2019-03-22
    相关资源
    最近更新 更多