栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Andord 使用Webview调用H5 html文件及跳转页面的问题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Andord 使用Webview调用H5 html文件及跳转页面的问题

Andord 使用Webview调用H5 html文件及跳转页面的问题
  • 背景:使用Android+H5混合开发APP,并从云服务器获取APP数据。Android调用H5代码需要使用
    WebView接口,首先使用Android Studio或其它idea创建一个Android原生项目(本示例使用Android Studio),将左侧的目录显示类型切换至“Project”,如图:

    并在与JAVA主程序所在目录的同级目录下新建一个assets目录来放置前端代码和静态资源,如图:

    然后在MainActivity.java中引入并调用WebView,并使用类似
webView.loadUrl("file:///android_asset/web/index.html");

来调用html文件,file:///android_asset/ 即对应之前创建的assets目录。
MainActivity.java中完整调用代码:

package com.example.myapplication001;

import androidx.appcompat.app.AppCompatActivity;
import android.view.View;
import android.webkit.JavascriptInterface;
import android.webkit.WebView;
import android.webkit.WebViewClient;


public class MainActivity extends AppCompatActivity {
    private WebView webView;
    
    
    @SuppressLint("SetJavascriptEnabled")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //加载页面
        webView = (WebView) findViewById(R.id.webview);
        //允许Javascript执行
        webView.getSettings().setJavascriptEnabled(true);
        //找到Html文件,也可以用网络上的文件
        webView.loadUrl("file:///android_asset/web/index.html");
    }
}

同时在layout的activity_main.xml中定义WebView组件:




    


此时启动APP就会使用webView.loadUrl() 中html文件里所展示的页面了,应用js等静态文件使用相对路径即可。
运行app后,因为有一步验证是否登录的操作,如果未登录则跳转至login.html,让用户进行登录操作,发现没有正常跳转。

  • 问题描述:Android Webview调用的html中 URL重定向失效,如:
window.location.href="./login.html";

经过一番文档查询,最终发现需要注册一个WebViewClient来监听管理webView中的事件,这其中也包括URL重定向的事件,详细文档地址:https://blog.csdn.net/harvic880925/article/details/51523983
这里我们只需要监听URL重定向事件即可:

webView.setWebViewClient(new WebViewClient(){

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        webView.loadUrl(url);
        return false;
    }
});

这里要注意return false;即为让Webview自己处理URL,return true 的话WebView接下来就不会再加载这个URL,声明后重新打包APP并在Android模拟器上运行就能正常跳转页面啦,这里也包括其它网络链接。
完整代码:

package com.example.myapplication001;

import androidx.appcompat.app.AppCompatActivity;
import android.view.View;
import android.webkit.JavascriptInterface;
import android.webkit.WebView;
import android.webkit.WebViewClient;


public class MainActivity extends AppCompatActivity {
    private WebView webView;
    
    
    @SuppressLint("SetJavascriptEnabled")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //加载页面
        webView = (WebView) findViewById(R.id.webview);
        //允许Javascript执行
        webView.getSettings().setJavascriptEnabled(true);
        //找到Html文件,也可以用网络上的文件
        webView.loadUrl("file:///android_asset/web/index.html");
        
        webView.setWebViewClient(new WebViewClient(){
        
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                webView.loadUrl(url);
                return false;
            }
        });
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/351634.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号