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); 
        } 
}
目录
相关文章
|
16天前
|
安全 JavaScript 前端开发
kotlin开发安卓app,JetPack Compose框架,给webview新增一个按钮,点击刷新网页
在Kotlin中开发Android应用,使用Jetpack Compose框架时,可以通过添加一个按钮到TopAppBar来实现WebView页面的刷新功能。按钮位于右上角,点击后调用`webViewState?.reload()`来刷新网页内容。以下是代码摘要:
|
18天前
|
JavaScript 前端开发 Android开发
kotlin开发 webview如何在收到JS调用后,native返回数据给到JS
这段内容描述了在Hybrid App开发中,使用Kotlin的Compose构建的Web视图(WebView)如何通过JsBridge实现JavaScript与原生代码的交互
|
18天前
|
JavaScript 前端开发 Android开发
kotlin安卓在Jetpack Compose 框架下使用webview , 网页中的JavaScript代码如何与native交互
在Jetpack Compose中使用Kotlin创建Webview组件,设置JavaScript交互:`@Composable`函数`ComposableWebView`加载网页并启用JavaScript。通过`addJavascriptInterface`添加`WebAppInterface`类,允许JavaScript调用Android方法如播放音频。当页面加载完成时,执行`onWebViewReady`回调。
|
19小时前
|
JavaScript API
前后端数据交互.js文件的axios的写法,想要往后端发送数据,页面注入API,await的意思是同步等待服务器数据,并返回,axios注入在其他页面,其他页面调用的时候,同步作用
前后端数据交互.js文件的axios的写法,想要往后端发送数据,页面注入API,await的意思是同步等待服务器数据,并返回,axios注入在其他页面,其他页面调用的时候,同步作用
|
6天前
|
安全 Android开发 iOS开发
探索安卓与iOS开发的差异:平台特性与用户体验的深度对比
在移动应用开发的广阔天地中,安卓和iOS两大平台各占半壁江山。本文旨在通过数据驱动的分析方法,深入探讨这两大操作系统在开发环境、用户界面设计及市场表现等方面的差异。引用最新的行业报告和科研数据,结合技术专家的观点,本文将提供对开发者和市场分析师均有价值的洞见。
|
9天前
|
Java 开发工具 Android开发
探索Android与iOS开发的差异:平台选择对项目成功的影响
在移动应用开发的广阔天地中,Android和iOS两大平台各自占据着半壁江山。本文将深入探讨这两个平台在开发过程中的关键差异点,包括编程语言、开发工具、用户界面设计、性能优化以及市场覆盖等方面。通过对这些关键因素的比较分析,旨在为开发者提供一个清晰的指南,帮助他们根据项目需求和目标受众做出明智的平台选择。
|
9天前
|
编解码 Android开发 iOS开发
深入探索Android与iOS开发的差异与挑战
【6月更文挑战第24天】在移动应用开发的广阔舞台上,Android和iOS两大操作系统扮演着主角。它们各自拥有独特的开发环境、工具集、用户基础及市场策略。本文将深度剖析这两个平台的开发差异,并探讨开发者面临的挑战,旨在为即将踏入或已在移动开发领域奋斗的开发者提供一份实用指南。
34 13
|
8天前
|
监控 Android开发 iOS开发
探索Android与iOS开发的差异:平台、工具和用户体验的比较
【6月更文挑战第25天】在移动应用开发的广阔天地中,Android和iOS两大平台各领风骚,它们在开发环境、工具选择及用户体验设计上展现出独特的风貌。本文将深入探讨这两个操作系统在技术实现、市场定位和用户交互方面的关键差异,旨在为开发者提供一个全景式的视图,帮助他们在面对项目决策时能够更加明智地选择适合自己项目需求的平台。
|
10天前
|
XML Java 开发工具
Android Studio开发Android TV
【6月更文挑战第19天】
|
8天前
|
缓存 测试技术 Shell
详细解读Android开发命令行完全攻略
详细解读Android开发命令行完全攻略
10 1