首页 文章 精选 留言 我的

精选列表

搜索[电磁兼容性],共7770篇文章
优秀的个人博客,低调大师

Mozilla 测试 Firefox/100.0 用户代理,检查网站兼容性

随着今天 Mozilla 更新了 Firefox 浏览器,Firefox 的版本号已经到达了 91。虽然目前的版本号仍然是两位数,但按照官方的升级路线图,明年 3 月 Mozilla 将发布 Firefox Nightly 100,为此 Mozilla 发起了一项实验,他们将 Firefox 浏览器的用户代理提前更改为三位数的 "Firefox/100.0" 版本,以此来测试未来将 Firefox 版本号更新至 100 时,是否会有网站因为用户代理的问题而出现网站加载异常的情况。 用户代理是网络浏览器使用的一个字符串,其中包括关于该软件的信息,例如名称、版本和使用的技术概要。当一个浏览器发布新版本的时候,开发者也会增加用户代理字符串中的版本号。 以 Mozilla Firefox 91 版本为例,它的用户代理将会如下显示: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0 Firefox 的用户代理可以被拆分为以下几个部分: Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrailFirefox/firefoxversion Mozilla/5.0表明该浏览器与 Mozilla 相兼容的通用字符串。此字段几乎存在于现今所有浏览器的用户代理之中; platform描述了浏览器所运行的本地操作系统平台(例如:Windows、Mac、Linux 或 Android),以及其是否为移动设备; rv:geckoversion显示了 Gecko 的版本号。在最近几个版本的浏览器中, geckoversion与firefoxversion一致; Gecko/geckotrail标明浏览器基于 Gecko,在桌面端 geckotrail的值恒为"20100101"; Firefox/firefoxversion标明浏览器是 Firefox,并提供了版本号; 当访问一个网站时,浏览器的用户代理字符串将会被发送到网站,用来让网络协议的对端来识别发起请求的用户代理软件的应用类型、操作系统、软件开发商以及版本号。 在进行测试时,Mozilla 将把 Firefox 的用户代理改为以下字符串。如果持续的测试显示许多网站都会因为用户代理而产生问题,Firefox 可能会将用户代理暂时冻结在 Firefox 99.X 这样两位数的数字。 Mozilla/5.0 (Windows NT 10.0; rv:100.0) Gecko/20100101 Firefox/100.0 如果开发者想要在自己的网站上测试新的三位数用户代理,可以按照以下步骤操作手动更改用户代理字符串: 打开 Firefox,在地址栏中输入 「about:config」 然后按回车; 搜索「general.useragent.override」; 随后选择 「String」,然后单击加号 「+」,如下图所示: 单击 「+」 图标后,在输入框中输入文本:「Mozilla/5.0 (Windows NT 10.0; rv:100.0) Gecko/20100101 Firefox/100.0」,如下图所示: 然后保存设置,并重新启动浏览器; 完成上述设置后,访问网站时浏览器会将新的用户代理字符串发送给网站。如果遇到任何问题,开发者可以点击链接向 Mozilla 提交错误报告。 要将用户代理改回浏览器的默认设置,只需找到上面创建的设置将其删除即可。

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

windows 7 解决B/S架构兼容性的case

来san Francisco(旧金山)一个星期了,今天碰巧使用windows 7 中的免费组件Virtual PC 的XP Mode 解决了一个棘手的B/S架构(很多web system都有这样的问题存在)盛行后带来的异构客户端的兼容问题。 我暂住在小姨这里,她是一所私立大学的文学教授。她的job需要在学校的一个基于web的系统上(这里叫: CyberCampus)批改学生的作业,发布自己讲课的视频、文章以及回答学生的问题等等。but遇到了一个奇怪又无奈的问题:她如果在线编辑或者update她的课程内容的话,必须在她的旧电脑上做(windows me的系统95年买的,速度可想而知,估计现在这台PC只能帮她做这件事。在她编辑她的课程内容时是可以看到编辑页面的按钮的,而在windows vista 或者windows 7 或者他们家的另一台MAC的系统苹果机上都看不到编辑按钮,只能通过HTML标记进行,而这样就无形中加大了小姨的工作量,而对她这样的非IT人事来说HTML标记是多么恐怖的一件事!相当于让一个文学工作者去写Code!)。而做PPT或者批改学生作业或者文档的时候就在新的PC上做了。所以带来了很多麻烦,在新的PC上做了一半事情还要拿U盘Copy到Old PC上去收尾。多么惨不忍睹的事情啊(难道是地球人“杯具”用多了造成的?)。 不再愿意看到这样的事情发生在地球人身上。所以一探究竟,立誓要为地球人造福。发现小姨的New PC是windows 7的系统,而旧的PC是windows me 那么是什么差异造成了小姨的困惑呢? 因为她用的System是基于Web的,所以我想问题应该出在浏览器上。再仔分析了她学校的Web system。 wow!用CGI写的。OK 再次确定问题就是浏览器的版本问题。只要换成IE6.0的浏览器版本这个问题就可以解决,but windows 7 上怎么能装 IE 6.0呢? OK,我想到了windows 7上的虚拟化解决方案 virtual PC 的XP Mode,于是download 再安装(如果你也遇到了这样的问题,可以在这里download: download virtual-pc and Windows XP Mode),15分钟时间XP Mode 的虚拟机已经打开了,如果你从来没有安装过甚至还不了解什么是virtual PC 的XP mode的话,建议你看一段3分钟的视频: 点此查看virtual PC XP mode 教学视频。 OK,安装完XP mode 并且已经在你的PC上开始运行了以后,你可能会说,这不就是在虚拟机里安装一个XP么?那么你就错了,并没有真正的了解到XP mode 的作用。 接下来,我们需要的就是不在虚拟机中,而是直接在windows 7中来运行IE 6.0。要这样其实在XP Mode中很简单。当你启动了XP Mode后只需要在你安装XP Mode时所创建的用户配置文件的启动目录中放入你想要的应用程序的快捷方式就可以了。接下来你可以关闭XP Mode 然后在windows 7的开始--所有程序—virtualPC—XP Mode应用程序的目录中就可以直接打开XP Mode下的应用程序。如此一来,IE6.0就在windows 7中跑起来了。这样一来,因为B/S架构所造成的Web system兼容问题就在XP Mode的铁蹄下不复存在了。 本文转自 angerfire 51CTO博客,原文链接:http://blog.51cto.com/angerfire/278560,如需转载请自行联系原作者

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

记录一次解决安装 Apk 兼容性问题

问题描述 现象 代码执行安装Apk,出现系统弹框解析错误,解析包时出现错误 场景 在华为P20 Android 8.0 手机上,下载Apk并使用通知栏进度条显示,开启应用锁屏通知权限,下载过程在锁屏情况下进行,下载完成后自动执行安装Apk,在解锁后出现系统弹框,解析包出现错误。 解决之前安装Apk的方法 首先在AndroidManifest中声明fileProvider <provider android:name="android.support.v4.content.FileProvider" android:authorities="${applicationId}.fileprovider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_path" /> </provider> provider属性说明 属性 说明 name android V4 包中的类FileProvider authorities 你的文件的Uri的域名一般以包名.fileprovider的格式,防止重名 exported 设置不允许导出,我们的FileProvider应该是私有的 grantUriPermissions 允许获取文件的临时访问权限 resourse 设置FileProvider访问的文件路径 res包下创建file_path.xml <?xml version="1.0" encoding="utf-8"?> <paths xmlns:android="http://schemas.android.com/apk/res/android"> <external-path name="external_path" path="test" /> <cache-path name="internal_path" path="test" /> 这里可以创建很多个paths,但是每个paths的name不能一样 </paths> path 说明 <files-path name="*name*" path="*path*" /> 对应的是:Context.getFileDir()的路径地址 对应路径:Context.getFileDir()+"/${path}/" 得到路径:content://${applicationId}/&{name}/ <cache-path name="*name*" path="*path*" /> 对应路径:Context.getCacheFir()+"/${path}/" 得到路径:content://${applicationId}/&{name}/ <external-path name="*name*" path="*path*" /> 对应路径:Environment.getExternalStorageDirectory()+"/${path}/" 得到路径:content://${applicationId}/&{name}/ <external-files-path name="*name*" path="*path*" /> 对应路径:Context.getExternalStorageDirectory()+"/${path}/" 得到路径:content://${applicationId}/&{name}/ <external-cache-path name="*name*" path="*path*" /> 对应路径: Context.getExternalCacheDir()+"/${path}/" 得到路径:content://${applicationId}/&{name}/ 举个例子说明: path做如下声明 <paths xmlns:android="http://schemas.android.com/apk/res/android"> <files-path name="my_images" path="images/"/> </paths> File imagePath = new File(Context.getFilesDir(), "images"); File newFile = new File(imagePath, "default_image.jpg"); Uri contentUri = getUriForFile(getContext(), "com.mydomain.fileprovider", newFile); contentUri值为:content://com.mydomain.fileprovider/my_images/default_image.jpg 安装apk的方法(7.0版本兼容问题) public static void installApk(Context context,File apkFile){ try { Intent intent = new Intent(Intent.ACTION_VIEW); Uri apkUri = null; //判断版本是否是 7.0 及 7.0 以上 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { apkUri = FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".fileProvider", apkFile); //添加对目标应用临时授权该Uri所代表的文件 intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION); } else { apkUri = Uri.fromFile(apkFile); } intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setDataAndType(apkUri, "application/vnd.android.package-archive"); context.startActivity(intent); } catch (Exception e) { e.printStackTrace(); } } Android 8.0系统需要声明权限 <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGE" /> OK,以上就是大家普遍解决7.0,以及8.0版本兼容问题的方法。 但是,在上文描述的场景中依然报出了错误: java.lang.SecurityException: Permission Denial: opening provider android.support.v4.content.FileProvider from ProcessRecord{cc3ad2316425: com.android.packageinstaller/u0a21} (pid=16425, uid=10021) that is not exported from uid 10340 懵逼.jpg 问题定位 经过短暂的懵逼后,开始通过各种方式,探索问题的原因。 根据系统log分析,猜测在锁屏时,用于安装Apk的service处于休眠或者不可用的状态,导致通过intent.addflags方式赋予的临时权限失效了。于是,再次仔细看了官方文档后,发现还有一个方法,可以生成权限且在主动调用方法或者手机重启后才会失效。 改进后的代码 public static void installApk(Context context,File apkFile){ try { Intent intent = new Intent(Intent.ACTION_VIEW); Uri apkUri = null; //判断版本是否是 7.0 及 7.0 以上 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { apkUri = FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".fileProvider", apkFile); //添加对目标应用临时授权该Uri所代表的文件 intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION); } else { apkUri = Uri.fromFile(apkFile); } intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setDataAndType(apkUri, "application/vnd.android.package-archive"); //查询所有符合 intent 跳转目标应用类型的应用,注意此方法必须放置setDataAndType的方法之后 List<ResolveInfo> resInfoList = context.getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); //然后全部授权 for (ResolveInfo resolveInfo : resInfoList) { String packageName = resolveInfo.activityInfo.packageName; context.grantUriPermission(packageName, uri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION); } context.startActivity(intent); } catch (Exception e) { e.printStackTrace(); } } 再次尝试,此问题再没有出现。 原文发布时间为:2018-11-9 本文作者:bear~ 本文来自云栖社区合作伙伴“安卓巴士Android开发者门户”,了解相关信息可以关注“安卓巴士Android开发者门户”。

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

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

用户登录
用户注册