使用js实现WebView中图片点击查看

Dear 丶 2023-07-01 06:24 78阅读 0赞

webview 加载的网页中有图片展示,要求实现点击图片放大查看的功能。
图片展示放在Android端处理,图片RUL的获取需要通过网页调用js代码实现。
html和Android交互,可看Android 和 HTML 页面交互

1.新建图片展示页面WebPicturesActivity

  1. public class WebPicturesActivity extends AppCompatActivity {
  2. private String currentURL;
  3. private String[] urls;
  4. @Override
  5. protected void onCreate(@Nullable Bundle savedInstanceState) {
  6. super.onCreate(savedInstanceState);
  7. setContentView(R.layout.activity_webpicture);//只有一个photoview控件
  8. Intent intent = getIntent();
  9. if (intent != null) {
  10. currentURL = intent.getStringExtra("curImg");
  11. urls = intent.getStringArrayExtra("imageUrls");
  12. //用三方图片展示控件 implementation 'com.bm.photoview:library:1.4.1'
  13. PhotoView photoView = findViewById(R.id.pv);
  14. photoView.enable();
  15. photoView.setScaleType(ImageView.ScaleType.FIT_CENTER);
  16. //Glide的版本是3.7.0,如果使用4.0以上要配置AppGlideModule
  17. //只实现了单个展示,可用viewpager展示图片url列表
  18. Glide.with(WebPicturesActivity.this)
  19. .load(currentURL)
  20. .override(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)
  21. .fitCenter()
  22. .crossFade()
  23. .into(photoView);
  24. }
  25. }
  26. }

2.新建本地类ImageJavascriptInterface供js调用

  1. public class ImageJavascriptInterface {
  2. private Context context;
  3. private static final String TAG = "ImageJavascriptInterface";
  4. public ImageJavascriptInterface(Context context) {
  5. this.context = context;
  6. }
  7. @JavascriptInterface //必须添加
  8. public void openImage(String img, String[] array) {
  9. L.d(TAG, "openImage: " + img);
  10. for (String imgUrl : array) {
  11. L.d(TAG, "openImage: " + imgUrl);
  12. }
  13. Intent intent = new Intent(context, WebPicturesActivity.class);
  14. intent.putExtra("imageUrls", array);
  15. intent.putExtra("curImg", img);
  16. context.startActivity(intent);
  17. }
  18. }

3.设置webview

要在页面加载之后添加js代码,即在onPageFinished中添加

  1. WebSettings settings = webView.getSettings();
  2. settings.setJavaScriptEnabled(true);//支持js
  3. settings.setDomStorageEnabled(true);
  4. webView.addJavascriptInterface(new ImageJavascriptInterface(context), "imagelistener");
  5. webView.setWebViewClient(new WebViewClient() {
  6. @Override
  7. public void onPageStarted(WebView view, String url, Bitmap favicon) {
  8. super.onPageStarted(view, url, favicon);
  9. }
  10. @Override
  11. public void onPageFinished(WebView view, String url) {
  12. super.onPageFinished(view, url);
  13. addImageClickJS(view);//页面加载完后设置图片监听事件
  14. }
  15. });
  16. webView.loadDataWithBaseURL(null, url, "text/html", "UTF-8", null);

addImageClickListener方法:
获取页面所有img标签,添加点击事件,调用Android的openImage方法,将点击的图片URL传出去

  1. //设置webview图片的监听事件
  2. private void addImageClickListener(WebView webView) {
  3. webView.loadUrl("javascript:(function(){" +
  4. "var objs = document.getElementsByTagName('img'); " +
  5. "var array=new Array(); " +
  6. "for(var j=0;j<objs.length;j++)" +
  7. "{" +
  8. " array[j]=objs[j].src;" +
  9. "}" +
  10. "for(var i=0;i<objs.length;i++) " +
  11. "{" +
  12. " objs[i].οnclick=function() " +
  13. " {" +
  14. " window.imagelistener.openImage(this.src,array); " +
  15. " }" +
  16. " }" +
  17. "imgTag.insertAdjacentHTML(\"beforebegin\", \"<p></p>\");" +
  18. "})()");
  19. }

发表评论

表情:
评论列表 (有 0 条评论,78人围观)

还没有评论,来说两句吧...

相关阅读