监听WebView页面上所有的图片
有两周没写简书了,有一丢丢懒惰了,还是要坚持下来啊
废话不多说,进入主题
需求
现在有一个类似聚合阅读的APP里面的文章都是以WebView来显示内容
用户点击文章中的图片会进入到查看图片的页面
问题
根据Android Hybrid的想法,需要在HTML页面中提供让Android调用的js方法,但是在的HTML中并没有提供让Android调用的方法的时候该怎么实现功能。
思路
-
使用WebView的js注入,为HTML加入js函数监听
-
在Android中添加当触发HTMl中js方法的接口
实现
布局就一个webview,这里就不贴出了
MainActivity.java
public class MainActivity extends AppCompatActivity
{
private static final String URL = "http://www.jianshu.com/p/c51174efd824";
private WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView = (WebView) findViewById(R.id.wv_test);
//获得webview的设置,并设置webview支持js
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new MyWebViewClient());
webView.addJavascriptInterface(new scriptInterface(MainActivity.this), "imagelistner");
webView.loadUrl(URL);
}
// WebViewClient监听
private class MyWebViewClient extends WebViewClient
{
@Override
public void onPageFinished(WebView view, String url)
{
// html加载完成之后,添加监听图片的点击js函数
addImageClickListner();
}
}
/**
* WebView与JS交互
**/
// 注入js函数监听
@android.webkit.JavascriptInterface
private void addImageClickListner()
{
// 这段js函数的功能就是,遍历所有的img标签,并添加onclick函数,在还是执行的时候调用本地接口传递url过去
webView.loadUrl("javascript:(function(){" +
"var objs = document.getElementsByTagName(\"img\"); "
+ "for(var i=0;i<objs.length;i++) " +
"{" + " " +
"objs[i].onclick=function() " + " " +
"{ "
+ " window.imagelistner.openImage(this.src); " + " " +
" } " + "}" + "})()");
}
// js通信接口
class scriptInterface
{
private Context context;
public scriptInterface(Context context)
{
this.context = context;
}
@android.webkit.JavascriptInterface
public void openImage(String img)
{
//模拟点击跳转
Toast.makeText(MainActivity.this, "点击了图片" + img,
Toast.LENGTH_SHORT).show();
}
}
}
本文作者:code小生_
本文发布时间:2018年05月23日
本文来自云栖社区合作伙伴CSDN,了解相关信息可以关注csdn.net网站。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
【iOS】自定义表情的实现
现在很多App都有自己的自定义的表情,客户端可能要实现自己定表情的选择、发送和显示,这里我介绍一种简单的自定义表情的实现思路和代码。 以下介绍基本可以实现聊天中对自定义表情的需求,可结合下图来理解: 资源准备: 自定义表情图片的命名。 每个自定义表情的意思。 emtionMeans.plist:key--表情选择器每个表情对应的tag值,value--每个表情的意思。 emtions.plist:key--每个表情的意思,value--每个表情对应的图片。 实现逻辑: 初始化表情选择器,主要根据以上两个plist表格相互转换来获取需要的东西。 创建一个EmojiView继承自UIVIew,主要代码如下: 实例化一个EmojView对象即可得到一个自定义表器的选择器。 接下来我们需要一个辅助器,用来判断某个字符串是不是表情字符串以及某一串字符串中是否包含表情。因为现实表情需要用到富文本,一般对内存和性能的消耗比较大,对于不含表情的字符串我们还是直接UILabel来显示更好些,特别是像聊天这样的布局。显示某条聊天消息之前,我们先判断该消息中是否包含表情字符串,在这里我用的是[]来识别的,如...
- 下一篇
利用HBuilder将vue项目打包成移动端app
记录以下自己将web app打包成移动端app的步骤及问题 事先准备,开发完成的web app项目(也可以利用vue-cli脚手架构建vue模板项目),npm run dev可以正常预览的项目 1,将项目目录下config文件内index.js中assetsPublicPath修改为assetsPublicPath: './' 2,执行npm run build之后生成dist文件夹 3,打开HBuilder,文件->打开目录,如下图 选择刚才生成的dist目录,输入项目名称,点击完成 附HBuilder下载地址:http://www.dcloud.io/ 3,此时会看到HBuilder项目下多了一个W标识(表示web项目)的myApp项目, 右键菜单选择‘转换成移动‘转换成移动App’,然后‘myApp’前面的标识就变成了‘A’,至此就已经转换成移动app了, 随后就可以利用HBuilder连接真机运行 或者发行成为原生app 注意:如果真机运行或模拟器运行报如下错误 Uncaught Error: [vuex] vuex requires a Promise polyfill...
相关文章
文章评论
共有0条评论来说两句吧...