Android: 在WebView中获取网页源码

简介:

1. 使能javascript: 

?
1
webView.getSettings().setJavaScriptEnabled( true );

2. 编写本地接口

?
1
2
3
4
5
final  class  InJavaScriptLocalObj {
     public  void  showSource(String html) {
         Log.d( "HTML" , html);
     }
}


3. 向网页暴露本地接口

?
1
webView.addJavascriptInterface( new  InJavaScriptLocalObj(), "local_obj" );


4. 编写自己的WebViewClient,并在onPageFinished中提取网页源码。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
final  class  MyWebViewClient extends  WebViewClient{ 
     public  boolean  shouldOverrideUrlLoading(WebView view, String url) {  
         view.loadUrl(url);  
         return  true ;  
    
     public  void  onPageStarted(WebView view, String url, Bitmap favicon) {
         Log.d( "WebView" , "onPageStarted" );
         super .onPageStarted(view, url, favicon);
     }   
     public  void  onPageFinished(WebView view, String url) {
         Log.d( "WebView" , "onPageFinished " );
         view.loadUrl( "javascript:window.local_obj.showSource('<head>'+"  +
                 "document.getElementsByTagName('html')[0].innerHTML+'</head>');" );
         super .onPageFinished(view, url);
     }
}

 

组合在一起的代码为:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package  com.hi.briancol.htmlsource;
 
import  android.app.Activity;
import  android.graphics.Bitmap;
import  android.os.Bundle;
import  android.util.Log;
import  android.webkit.WebView;
import  android.webkit.WebViewClient;
 
public  class  HtmlSource extends  Activity {
     private  WebView webView;
     /** Called when the activity is first created. */
     @Override
     public  void  onCreate(Bundle savedInstanceState) {
         super .onCreate(savedInstanceState);
         setContentView(R.layout.main);
         webView = (WebView)findViewById(R.id.webview);
         webView.getSettings().setJavaScriptEnabled( true );
         webView.addJavascriptInterface( new  InJavaScriptLocalObj(), "local_obj" );
         webView.setWebViewClient( new  MyWebViewClient());
         webView.loadUrl( "http://www.cnblogs.com/hibraincol/" );
     }
     
     
    final  class  MyWebViewClient extends  WebViewClient{ 
         public  boolean  shouldOverrideUrlLoading(WebView view, String url) {  
             view.loadUrl(url);  
             return  true ;  
        
         public  void  onPageStarted(WebView view, String url, Bitmap favicon) {
             Log.d( "WebView" , "onPageStarted" );
             super .onPageStarted(view, url, favicon);
         }   
         public  void  onPageFinished(WebView view, String url) {
             Log.d( "WebView" , "onPageFinished " );
             view.loadUrl( "javascript:window.local_obj.showSource('<head>'+"  +
                     "document.getElementsByTagName('html')[0].innerHTML+'</head>');" );
             super .onPageFinished(view, url);
         }
     }
     
     final  class  InJavaScriptLocalObj {
         public  void  showSource(String html) {
             Log.d( "HTML" , html);
         }
     }
}

关键之处在于:

view.loadUrl("javascript:window.local_obj.showSource('<head>'+document.getElementsByTagName('html')[0].innerHTML+'</head>');");

运行,可以看到在showSource(String html)中打印了网页源码。

相关文章
|
6月前
|
Ubuntu 开发工具 Android开发
Repo下载AOSP源码:基于ubuntu22.04 环境配置,android-12.0.0_r32
本文介绍了在基于Ubuntu 22.04的环境下配置Python 3.9、安装repo工具、下载和同步AOSP源码包以及处理repo同步错误的详细步骤。
383 0
Repo下载AOSP源码:基于ubuntu22.04 环境配置,android-12.0.0_r32
|
4月前
|
程序员 开发工具 Android开发
Android|WebView 禁止长按,限制非白名单域名的跳转层级
如何限制 WebView 仅域名白名单网址能随意跳转,并禁用长按选择文字。
71 2
|
4月前
|
安全 网络安全 Android开发
深度解析:利用Universal Links与Android App Links实现无缝网页至应用跳转的安全考量
【10月更文挑战第2天】在移动互联网时代,用户经常需要从网页无缝跳转到移动应用中。这种跳转不仅需要提供流畅的用户体验,还要确保安全性。本文将深入探讨如何利用Universal Links(仅限于iOS)和Android App Links技术实现这一目标,并分析其安全性。
560 0
|
6月前
|
开发工具 git 索引
repo sync 更新源码 android-12.0.0_r34, fatal: 不能重置索引文件至版本 ‘v2.27^0‘。
本文描述了在更新AOSP 12源码时遇到的repo同步错误,并提供了通过手动git pull更新repo工具来解决这一问题的方法。
219 1
|
6月前
|
Android开发 Docker 容器
docker中编译android aosp源码,出现Build sandboxing disabled due to nsjail error
在使用Docker编译Android AOSP源码时,如果遇到"Build sandboxing disabled due to nsjail error"的错误,可以通过在docker run命令中添加`--privileged`参数来解决权限不足的问题。
1211 1
|
6月前
|
API 开发工具 Android开发
Android源码下载
Android源码下载
697 0
|
6月前
|
开发工具 uml git
AOSP源码下载方法,解决repo sync错误:android-13.0.0_r82
本文分享了下载AOSP源码的方法,包括如何使用repo工具和处理常见的repo sync错误,以及配置Python环境以确保顺利同步特定版本的AOSP代码。
829 0
AOSP源码下载方法,解决repo sync错误:android-13.0.0_r82
|
6月前
|
Java Android开发 芯片
使用Android Studio导入Android源码:基于全志H713 AOSP,方便解决编译、编码问题
本文介绍了如何将基于全志H713芯片的AOSP Android源码导入Android Studio以解决编译和编码问题,通过操作步骤的详细说明,展示了在Android Studio中利用代码提示和补全功能快速定位并修复编译错误的方法。
344 0
使用Android Studio导入Android源码:基于全志H713 AOSP,方便解决编译、编码问题
|
6月前
|
Android开发
我的Android 进阶修炼(1): AOSP源码根目录结构
本文介绍了AOSP源码的根目录结构,提供了基于MTK9269 Android 9.0源码的目录说明,帮助读者了解AOSP源码的组织方式和各目录的功能。
301 0
我的Android 进阶修炼(1): AOSP源码根目录结构
|
6月前
|
开发工具 Android开发 git
全志H713 Android 11 :给AOSP源码,新增一个Product
本文介绍了在全志H713 Android 11平台上新增名为myboard的产品的步骤,包括创建新的device目录、编辑配置文件、新增内核配置、记录差异列表以及编译kernel和Android系统的详细过程。
383 0

热门文章

最新文章

  • 1
    如何修复 Android 和 Windows 不支持视频编解码器的问题?
  • 2
    当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
  • 3
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 4
    【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
  • 5
    APP-国内主流安卓商店-应用市场-鸿蒙商店上架之必备前提·全国公安安全信息评估报告如何申请-需要安全评估报告的资料是哪些-优雅草卓伊凡全程操作
  • 6
    Android经典面试题之Kotlin中Lambda表达式和匿名函数的区别
  • 7
    【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
  • 8
    【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 9
    android studio 学习之一
  • 10
    Android官方开发文档Training系列课程中文版:OpenGL绘图之添加动态效果