首页 文章 精选 留言 我的

精选列表

搜索[专家兼容测试],共10000篇文章
优秀的个人博客,低调大师

Android WebView加载网页,图片等元素宽度大小不兼容手机屏幕的宽度

无论是Android手机还是iOS手机,使用WebView加载一些没有专门为手机屏幕做适配的网页的时候,就会出现网页中的图片等标签元素的宽度大小和手机屏幕的宽度不一致的情况,如下图 之所以会出现上面的情况,是因为网页中的dom元素大小没有适配到移动网页中,有些元素是把宽度固定死的 解决办法有很多: 前端人员将网页适配到移动端(优点:最为规范的做法 缺点:一些不再维护的项目,是没有前端人员来适配) 移动端开发人员自己通过JS的注入来修改(优点:在缺乏前端人员的支持下,可以勉强这样做 缺点:元素变化的话,Native需要修改各种JS函数) 现在重点就说下第二种方法: 首先在Android和iOS这两个平台,WebView可以和Native进行交互的,在Native中编写JS函数注入到html中,也可以在网页调用Native的函数。 这里我就简单讲一下通过JS注入到html中,来改变相应元素的大小,以及字体等,Android和iOS都有WebView,都可以监听监听网页的加载的过程,在Android中通过WebViewClient来监听网页的加载过程,一般我们需要在网页所有资源加载完成后,也就是onPageFinish的方法中,注入JS,废话不多说,直接看代码: package com.example.webviewdemo; import android.content.Context; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.DisplayMetrics; import android.util.Log; import android.view.WindowManager; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; public class MainActivity extends AppCompatActivity { private static final String TAG = "WebView"; private WebView webView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); webView = findViewById(R.id.webView); initWebSettings(); webView.loadUrl("http://www.ah12377.cn/newsDetail/151"); //监听WebView是否加载完成网页 webView.setWebViewClient(new WebViewClient(){ @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); Log.d(TAG,"onPageFinished"); loadJS(); } }); } private void loadJS(){ webView.loadUrl("javascript:(function(){" //将DIV元素中的外边距和内边距设置为零,防止网页左右有空隙 + " var divs = document.getElementsByTagName(\"div\");" + " for(var j=0;j<divs.length;j++){" + " divs[j].style.margin=\"0px\";" + " divs[j].style.padding=\"0px\";" + " divs[j].style.width=document.body.clientWidth-10;" + " }" + " var imgs = document.getElementsByTagName(\"img\"); " + " for(var i=0;i<imgs.length;i++) " + " {" //过滤掉GIF图片,防止过度放大后,GIF失真 + " var vkeyWords=/.gif$/;" + " if(!vkeyWords.test(imgs[i].src)){" + " var hRatio="+getScreenWidthPX()+"/objs[i].width;" + " objs[i].height= objs[i].height*hRatio;"//通过缩放比例来设置图片的高度 + " objs[i].width="+getScreenWidthPX()+";"//设置图片的宽度 + " }" + "}" + "})()"); } /** * WebView Setting */ private void initWebSettings(){ WebSettings webSettings = webView.getSettings(); webSettings.setJavaScriptEnabled(true); // webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); } /** * 获取屏幕的宽度(单位:像素PX) * @return */ private int getScreenWidthPX(){ WindowManager wm = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE); DisplayMetrics dm = new DisplayMetrics(); if (wm != null && wm.getDefaultDisplay() != null){ wm.getDefaultDisplay().getMetrics(dm); return px2dip(dm.widthPixels); }else { return 0; } } /** * 像素转DP * @param pxValue * @return */ public int px2dip(float pxValue) { float scale = this.getResources().getDisplayMetrics().density; return (int) (pxValue / scale + 0.5f); } } 代码非常简单,效果图如下,通过上面的代码可以知道,我们可以通过JS来修改html的任何元素,也可以去掉或者隐藏html中的元素等,当然也要懂点JS和html的开发,才能更好地下手,当然这个过程使用Chrome浏览器的调试面板也很重要

优秀的个人博客,低调大师

卡巴斯基首款操作系统Kaspersky OS发布 兼容 x86/ARM

卡巴斯基今天跳出老本行,发布了名为 Kaspersky OS 的操作系统,主要使用对象为网络设备、工业控制系统和物联网设备。 据卡巴斯基 CEO Eugene Kaspersky 透露,这款操作系统已经秘密研发了 14 年,内部开发代号 11-11,因为最初的原型系统是在 11 月 11 日这天诞生的。 Kaspersky OS 采用了 Flux 高级安全内核架构(FLASK),安全性大大提升。因为开发者只允许操作系统执行被指定的操作,而其它操作将统统被禁止。 目前,除了 Kaspersky OS 之外,卡巴斯基还配套推出了独立的安全超级服务器(KSH)和用于 Kaspersky OS 组件之间安全交互的系统(KSS) 据 Kaspersky OS 产品说明显示,该操作系统支持搭载 X86/X64/ARM 处理器的设备,以下是最低运行配置: Kaspersky OS for x86/x64 CPU 处理器:Pentium II 或更高版本 内存:8MB 或更高版本 网络设备:Realtek RTL8139、Intel i82580 KasperskyOS for ARM CPU 处理器:ARMv7 或更高版本 内存:8MB 或更高版本 价格方面,Kaspersky OS 并没有一个固定价格,具体价格将视用户对系统功能需求的程度而变化。 目前,媒体爆料称网络设备厂商 Kraftway 已经成为 Kaspersky OS 的合作伙伴,并推出了 1000 台搭载这款操作系统的路由器,每台单价高达 3028 美元(约合2.1万人民币)。 本文来自开源中国社区 [http://www.oschina.net]

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册