如何将Web应用转为Android应用?登录跳转浏览器问题求助
解决WebView点击登录按钮跳转浏览器的问题
你的问题出在WebView默认会将页面中的跳转请求(包括表单提交)交给系统浏览器处理,要让操作在App内完成,只需给WebView设置自定义的WebViewClient,拦截并接管所有URL请求即可。
修改后的完整代码
package com.example.prn_update; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; public class MainActivity extends AppCompatActivity { private WebView myWebView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myWebView = findViewById(R.id.webView); WebSettings webSettings = myWebView.getSettings(); // 保留已有的必要设置 webSettings.setJavaScriptEnabled(true); webSettings.setDomStorageEnabled(true); webSettings.setDatabaseEnabled(true); // 可选:启用缓存提升加载体验 webSettings.setCacheMode(WebSettings.LOAD_DEFAULT); // 关键:设置自定义WebViewClient拦截跳转请求 myWebView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { // 让当前WebView加载请求的URL,不跳转浏览器 view.loadUrl(url); return true; } // 适配Android 7.0+的API重载方法 @Override public boolean shouldOverrideUrlLoading(WebView view, android.webkit.WebResourceRequest request) { view.loadUrl(request.getUrl().toString()); return true; } }); myWebView.loadUrl("https://script.google.com/macros/xxxxx/exec"); } }
关键说明
WebViewClient的shouldOverrideUrlLoading方法会拦截所有页面跳转请求,返回true表示由当前WebView处理该请求,不交给外部浏览器。- 同时重载两个版本的
shouldOverrideUrlLoading,适配不同Android版本的API要求。 - 若需对特定URL做特殊处理(比如部分链接仍需跳转浏览器),可在方法内判断
url的值后再决定是否拦截。
内容的提问来源于stack exchange,提问作者karthick ks
相关产品推荐
相关产品推荐

