Android端使用WebView注入一段js代码实现js调用android

简介: Android端使用WebView注入一段js代码实现js调用android

需求:为网页上个链接增加点击事件,但是这个链接无法增加js代码

url:http://public.rongcloud.cn/view/D4F444BE2D94D760329F3CF38B4AE35C

网页截图:


需要给“投融资讯“四个字设置点击事件

但是观察源码

<body>
  <div class="wrap content">
  <div class="content-inner">
  <div class="content-header">
  <h2 class="content-header-title">发货房间很干净或</h2>
  <div class="content-header-info">
  <span>2017-01-08</span>
  <span class="userId"><ahref="javascript:;">投融资讯</a></span>
  </div>
  </div>
  <div class="content-body" >
  <p style="text-align: center;margin:10px 0;">
  <img style="" src="http://7xi6ox.com1.z0.glb.clouddn.com/6ccb1a46485ecbe01324e130564a0fd9?imageView/0/w/200/h/170" />
  </p>
  <p style="margin-top:20px;" >
  <a onclick="count('http://public.rongcloud.cn/view/11C329D37EFD51832EF7E3CF2A0CE2D4', 'D4F444BE2D94D760329F3CF38B4AE35C')"style="color:#607fa6;text-decoration:none;"href="javascript:void(0)" >阅读原文</a>
  </p>
  </div>
  <div class="divider" style="height: 1px;margin: 9px 0;overflow: hidden;background-color: #e5e5e5;margin-top: 18px;"></div>
  </div>



并没有具体的onclick事件,怎么办呢?

1、首先在Chrome上写了端测试代码,测试没问题

</div><div>     var child=document.getElementsByTagName('a')[0];</div><div>     child.οnclick=function(){</div><div>         userIdClick();</div><div>     };</div><div>     function userIdClick(){ </div><div>        myObj.getClose();</div><div><br /></div><div><br /></div><div>     };</div><div>


2、然后使用安卓端注入进来

webview.getSettings().setJavaScriptEnabled(true);  
webview.addJavascriptInterface(new JSObject(), "myObj");
webview.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Toast.makeText(MainActivity.this, "wodo-7-", Toast.LENGTH_SHORT).show();
view.loadUrl(url);
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
String  js = "var script = document.createElement('script');";
js+= "script.type = 'text/javascript';";
   js+="var child=document.getElementsByTagName('a')[0];";
   js+="child.οnclick=function(){userIdClick();};";
   js+= "function userIdClick(){myObj.getClose();};";
webview.loadUrl("javascript:" + js);
}
});
class JSObject {
@JavascriptInterface
// sdk17版本以上加上注解
public String getData(String txt) {
return "12345678";
}
@JavascriptInterface
// sdk17版本以上加上注解
public void getClose() {
Toast.makeText(MainActivity.this, "dododo", Toast.LENGTH_SHORT)
.show();
// finish();
}
}

这样就可以实现点击调用本地方法了。


二、如果想获取html中某个内容


@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
String  js = "var script = document.createElement('script');";
js+= "script.type = 'text/javascript';";
   js+="var child=document.getElementsByTagName('a')[0];";
   js+="child.οnclick=function(){userIdClick();};";
   js+= "function userIdClick(){myObj.getClose();};";
webview.loadUrl("javascript:" + js);
// view.loadUrl("javascript:window.myObj.showSource(document.getElementsByTagName('p')[1].innerHTML);"); 
view.loadUrl("javascript:myObj.showSource(document.getElementsByTagName('p')[0].innerHTML);");   //关键代码
}
});
/**
* 本地化JS对象(第一种方法)
* 
* @author jiangwei1-g
*/
class JSObject {
@JavascriptInterface
// sdk17版本以上加上注解
public String getData(String txt) {
return "12345678";
}
@JavascriptInterface
// sdk17版本以上加上注解
public void getClose() {
Toast.makeText(MainActivity.this, "dododo", Toast.LENGTH_SHORT).show();
}
@JavascriptInterface
// sdk17版本以上加上注解
public void showSource(String html) { //关键代码
Toast.makeText(MainActivity.this, html, Toast.LENGTH_SHORT).show();
            System.out.println("====>html="+html); 
        } 
}
目录
相关文章
|
缓存 JavaScript 前端开发
Android WebView常见问题
本文主要介绍了在Android开发中WebView的使用方法,包括加载网址、设置相关属性(如JavaScript支持、缓存模式、屏幕适配等)、监听网页加载过程以及返回上一页面的功能实现。同时针对Android P版本限制明文流量的问题(ERR_CLEARTEXT_NOT_PERMITTED),提供了在`AndroidManifest.xml`中添加`android:usesCleartextTraffic=&quot;true&quot;`的解决办法。文章还附有完整代码示例,帮助开发者快速上手并解决常见问题。希望对您的开发工作有所帮助!
777 1
|
XML JavaScript Android开发
【Android】网络技术知识总结之WebView,HttpURLConnection,OKHttp,XML的pull解析方式
本文总结了Android中几种常用的网络技术,包括WebView、HttpURLConnection、OKHttp和XML的Pull解析方式。每种技术都有其独特的特点和适用场景。理解并熟练运用这些技术,可以帮助开发者构建高效、可靠的网络应用程序。通过示例代码和详细解释,本文为开发者提供了实用的参考和指导。
606 15
|
程序员 开发工具 Android开发
Android|WebView 禁止长按,限制非白名单域名的跳转层级
如何限制 WebView 仅域名白名单网址能随意跳转,并禁用长按选择文字。
544 2
|
JavaScript 前端开发 网络协议
抖音直播弹幕数据逆向:websocket和JS注入
抖音直播弹幕数据逆向:websocket和JS注入
2562 1
|
JavaScript API
前后端数据交互.js文件的axios的写法,想要往后端发送数据,页面注入API,await的意思是同步等待服务器数据,并返回,axios注入在其他页面,其他页面调用的时候,同步作用
前后端数据交互.js文件的axios的写法,想要往后端发送数据,页面注入API,await的意思是同步等待服务器数据,并返回,axios注入在其他页面,其他页面调用的时候,同步作用
|
9月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1625 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
9月前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1083 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
9月前
|
移动开发 Rust JavaScript
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1177 4
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
10月前
|
开发工具 Android开发
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
911 11
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
|
9月前
|
移动开发 Android开发
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
411 0