WebView新窗口打开链接

webview本身貌似不支持这种实现,但是我们可以通过修改链接,实现同样的效果,即在同一个webview上打开一个新窗口的链接,首先回顾一下html知识:


image.png

如果一个链接是新窗口打开,则其target值为"_blank",所以我们在onPageFinished()方法中,通过加载js,修改目标链接,使其在本webview中打开

private  class MyWebview extends WebViewClient{
//这里是重点,这里修改链接
    @Override
    public void onPageFinished(WebView view, String url) {
        view.loadUrl("javascript: var allLinks = document.getElementsByTagName('a'); if (allLinks) {var i;for (i=0; i<allLinks.length; i++) {var link = allLinks[i];var target = link.getAttribute('target'); if (target && target == '_blank') {link.setAttribute('target','_self');link.href = 'newtab:'+link.href;}}}");
    }

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        // TODO Auto-generated method stub
        if(url.startsWith("newtab:")){
            String realUrl=url.substring(7,url.length());
            Intent it = new Intent(Intent.ACTION_VIEW);
            it.setData(Uri.parse(realUrl));
            startActivity(it);
        }else{
            view.loadUrl(url);
        }
        return true;
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,384评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,322评论 25 709
  • Tips 由于WebView的用法实在太多,如果您只是想查询某个功能的使用——建议Ctrl+F(Commad+F)...
    BugDev阅读 12,307评论 11 109
  • 这篇博客主要来介绍 WebView 的相关使用方法,常见的几个漏洞,开发中可能遇到的坑和最后解决相应漏洞的源码,以...
    Shawn_Dut阅读 12,065评论 3 55
  • 收到CC姐寄给我的书已是半个月前。拿到书的那一刻,我仔细翻看书的扉页,看着听风的文字,内心特别的激动。尤其是看到那...
    晓越明阅读 3,848评论 2 6