Android系统Web字体/行高异常解决

相信做前端开发的朋友很多时候会遇到这样的问题,设置行高来达到文本垂直居中的目的,但移动端会遇到略偏上或者偏下,通常情况下轻微的偏移可能出现于设备像素密度、容器高度、字体大小等原因,比如30px容器内放15px文字,就做不到完全居中,这个不在今天问题范围,不再赘述。

今天的问题其实算是旧事重提,遇到这个问题,最初是在2015年了,当时团队其他同事做混合app有类似问题,同事最终似乎是采用padding的形式取代了行高,但实际上这个还会引起一些问题,主要是Android系统设置字体后,WebView内字体大小深圳和字体相关的属性都受到影响。

在去年4月份曾写过一篇文章《QQ内置浏览器下网页行高、字体大小显示异常解决》,但是当时只注意到Android系统下手机QQ内嵌的浏览器,直至后期做自己的Android App使用WebView内嵌网页,也发现了同样的问题,经过翻阅网上资料案例,发现近期挺多类似文章和提问,主要原因是Android系统多使用sp作为单位,会根据用户设置缩放字体。

常规的解决方法主要有以下两种 查看更多...

工作五年第一次,我失业了

公司也算是一个神奇的存在了,每次都悄无声息,第二天突然说要裁员。

我所经历的第一次是去年11月初,加班到晚上11点多发布版本后,第二天一早,研发团队砍掉一半。倒是把我留下了,当时心灰意冷,已不想再待下去,但因为一时没找到合适的坑,还是继续留下来,做着时有时无的新需求,半年后的今天,我们都要走人了,研发部剩下两个兄弟维护,其余的都撤了。

至此,我失业了!

谨以此文警示那些想去创业公司、已经去了创业公司的朋友们,互联网泡沫已破灭,且行且珍惜!

顺带提一句,有需要人的可以联系我哦,坐标深圳,五年经验,三年Java前后端,两年前端,联系方式见关于页。

异步输出网页列表查看详情后返回定位

最近有个需求,移动端网站,列表上拉加载,点击详情后返回,每次都固定返回到顶部,感觉这样不够人性化,希望固定到进列表前的页面,于是简单实现了一下。

这里有两个问题

1、数据都是异步的

2、只有返回的时候定位(刷新正常回顶部)

简单的实现思路及主要代码

为了方便二次加载,异步数据每次缓存到本地,同时拦截页面所有链接,在即将跳转的时候记录当前页面或者滚动元素的scrollTop值,下次进页面判断是否返回进来的,如果是直接进来或者刷新,则重新请求,如果为返回,则直接使用已缓存数据迅速加载后使用已缓存的scrollTop值定位到进详情页之前的位置,同时清除值,即scrollTop值的缓存仅一次有效。 查看更多...

Android优化之SparseArray替代HashMap

Java开发过程中,一般免不了使用HashMap来存储键值对以方便各种需求的实现,但是对于Android这种对内存非常敏感的移动平台,很多时候使用一些Java的API并不能达到更好的性能,相反反而更消耗内存,所以针对Android这种移动平台,也推出了更符合自己的API,比如SparseArray、ArrayMap用来代替HashMap在有些情况下能带来更好的性能提升。

对于SparseArray,比HashMap更省内存,在某些条件下性能更好,主要是因为它避免了对key的自动装箱(int转为Integer类型等),它内部则是通过两个数组来进行数据存储的,一个存储key,另外一个存储value,为了优化性能,它内部对数据还采取了压缩的方式来表示稀疏数组的数据,同时,还实现了SparseIntArray、SparseLongArray、SparseBooleanArray。 查看更多...

为你的Express应用增加CSRF防护

CSRF(Cross-site request forgery)跨站请求伪造,也被称为"One Click Attack"或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。

众所周知,Web系统并没有绝对的安全,就比如我们公司年前遇到的情况,有些恶心网站通过网络抓包等手段,截取验证码发送接口,通过伪造请求实现了传入任意手机号并发送验证码的功能,虽然这看起来并没有什么用,但当这些不法分子拔了成百上千个接口后,就形成了一个疯狂的短信轰炸机,对于服务提供者,这些地下网站只要有人使用,就会不断得消耗短信费用,给企业带来不必要的损失。 查看更多...

Android WebView内嵌网页input无法选择文件解决

最近发现公司APP内嵌的网页点击上传图片没任何效果,查资料得知是Android安全限制,WebView内网页默认没有读取本地文件的权限。虽然网上有解决方案,但是由于Android版本几经波折,API签名大相径庭,想要完全兼容,要实现多个方法,为方便以后使用,简单记录一下。

首先,在使用WebView的页面,增加如下全局变量,方便回调使用:
查看更多...

Android软键盘遮挡输入框问题解决

移动APP、网站有界面底部存在输入框的情况,无论是原生还是WebView内嵌,在软键盘弹出时,经常会有遮挡输入框的问题,解决方法就是让软键盘弹出时窗口自适应,而非软键盘直接悬浮,网上看到有三种解决方案:

1、在你的activity中的oncreate中setContentView之前加上如下代码

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE | WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

2、在项目的AndroidManifest.xml文件中界面对应的Activity里加入android:windowSoftInputMode="stateVisible|adjustResize",这样会让屏幕整体上移。如果加上的是android:windowSoftInputMode="adjustPan"这样键盘就会覆盖屏幕。 查看更多...

使用cPanel主机部署基于composer、laravel的Web应用

因为希望在闲置cPanel主机上部署composer、laravel应用,简单记录一下(并非cPanel使用教程)。

1、登录cPanel,在Domains一栏找到“附加域”,按照常规添加我们要绑定的域名,生成站点目录。
2、SSH登录cPanel主机(ip为主机ip,共享、独享都可以,账户、密码复用cPanel的账户、密码),测试是否有全局安装composer。
3、FTP或者SFTP连接主机,上传必要文件,composer install/update,如果速度过慢,可以参照本地开发时做法,执行composer config -g repo.packagist composer https://packagist.phpcomposer.com,随后继续直至安装完毕。 查看更多...

Windows VPN无法连接、无法删除问题解决小记

家里电脑一直配置有PPTP的VPN连接,最近使用,发现不知什么时候开始不能用了,表现为连接一直进行中,不会出错也不会成功,系统是Win8.1,而且VPN服务器是正常的(因为在其他电脑上一直用着),无奈就想删除连接重建,发现删除不掉。

按照网上的说法,可能是某些服务被禁止运行了,主要有Remote Access Connection Manager(远程访问连接管理器)和Remote Access Auto Connection Manager(远程访问自动连接管理器)

Remote Access Connection Manager服务的启动又要依赖两个服务:SSTPS(secure socket tunneling protocol service)服务、Telephony服务。而Telephony服务常处于启动状态,没有问题。问题是出SSTPS(secure socket tunneling protocol service)服务上,单独启动SSTPS(secure socket tunneling protocol service)服务时会提示:自动停止,直接启动Remote Access Connection Manager服务时又说依赖的服务不能启动。 查看更多...

Android Webview增加自定义userAgent、headers

最近维护公司app,要内嵌在线网站进来,因为在线移动网站是类似常见商城的形式,底部有几个导航按钮,而app内嵌的情况想从网页层面控制页面的返回,同时再针对app内嵌情况下的界面做一些控制。

可能前面说得比较晦涩难懂,下面举个例子,比如,页面有12345五个底部导航,默认进首页(1),当点击2345的时候,在android下点击原生返回键还会回到首页(1),这样的效果体验不是很好,所以页面全局拦截a链接,通过js采用location.replace来做跳转,这样一来,只要内部页面没有直接跳回12345五个页面的操作,整体跳转体验应该和app类似了。

另一个问题,要做微信分享,但是众所周知,网页目前是不可能直接分享到微信(除了二维码形式),所以这里在定义了特定协议,网页请求如share://share?title=朴人博客&content=朴人博客…,原生app内接收后解析处理,在webview上弹出分享界面。 查看更多...