ios Safari浏览器不支持 js 复制字符串
本来设计成:点击"复制"按钮,可以复制订单号到剪切板的.
可以发现在 ios Safari 浏览器中不起作用.
后来在http://stackoverflow.com/ 查到
参考:http://stackoverflow.com/questions/34045777/copy-to-clipboard-using-javascript-in-ios
解决方法:
判断操作系统类型,如果是 ios 则不显示"复制"按钮(因为显示了,也无用)
(1)判断操作系统类型
ClientOsInfo info =SpringMVCUtil.getMobileOsInfo(request); model.addAttribute("ostype",info.getOsType());
osType的取值为"Ios","Android","WINDOWS PHONE"
public static final String OSTYPE_ANDROID="Android"; public static final String OSTYPE_IOS="Ios"; public static final String OSTYPE_WP="WINDOWS PHONE"; /*** * 黑莓 */ public static final String OSTYPE_BLACKBERRY="BLACKBERRY";
(2)前端通过 freeMark 判断:
<#if !(ostype??)|| ostype!='Ios'> <div id="copy_order" >复制</div> <div id="copy_money" >复制</div> </#if>
SpringMVCUtil.getMobileOsInfo
方法实现如下
/** * 判断手机的操作系统 IOS/android/windows phone/BlackBerry * * @param UA * @return */ public static ClientOsInfo getMobilOS(String UA) { if (UA == null) { return null; } UA=UA.toUpperCase(); ClientOsInfo osInfo=new ClientOsInfo(); // 存放正则表达式 String rex = ""; // IOS 判断字符串 String iosString = " LIKE MAC OS X"; if (UA.indexOf(iosString) != -1) { if (StringUtil.isFind(UA, "\\([\\s]*iPhone[\\s]*;", Pattern.CASE_INSENSITIVE)) { osInfo.setDeviceType(DEVICE_TYPE_PHONE); } else if (StringUtil.isFind(UA, "\\([\\s]*iPad[\\s]*;", Pattern.CASE_INSENSITIVE)) { osInfo.setDeviceType(DEVICE_TYPE_PAD); } rex = ".*" + "[\\s]+(\\d[_\\d]*)" + iosString; Pattern p = Pattern.compile(rex, Pattern.CASE_INSENSITIVE); Matcher m = p.matcher(UA); boolean rs = m.find(); if (rs) { String osVersion= m.group(1).replace("_", "."); osInfo.setVersion(osVersion); // System.out.println("Mobil OS is" + " IOS" +osVersion); osInfo.setOsTypeVersion(OSTYPE_IOS+"_" + osVersion); }else{ System.out.println("IOS"); osInfo.setOsTypeVersion(OSTYPE_IOS); } osInfo.setOsType(OSTYPE_IOS); return osInfo; } // Android 判断 String androidString = "ANDROID"; if (UA.indexOf(androidString) != -1) { if (StringUtil.isFind(UA, "\\bMobi", Pattern.CASE_INSENSITIVE)) { osInfo.setDeviceType(DEVICE_TYPE_PHONE); }else { osInfo.setDeviceType(DEVICE_TYPE_PAD); } rex = ".*" + androidString + "[\\s]*(\\d*[\\._\\d]*)"; Pattern p = Pattern.compile(rex, Pattern.CASE_INSENSITIVE); Matcher m = p.matcher(UA); boolean rs = m.find(); if (rs) { String version=m.group(1).replace("_", "."); osInfo.setVersion(version); System.out.println("Mobil OS is " + OSTYPE_ANDROID + version); osInfo.setOsTypeVersion(OSTYPE_ANDROID+"_" + version); }else{ System.out.println("Android"); osInfo.setOsTypeVersion(OSTYPE_ANDROID); } osInfo.setOsType(OSTYPE_ANDROID); return osInfo; } // windows phone 判断 String wpString = "WINDOWS PHONE"; if (osTypeMatch(UA, osInfo, wpString)) return osInfo; // BlackBerry 黑莓系统判断 String bbString = "BLACKBERRY"; if (UA.indexOf(bbString) != -1) { rex = ".*" + bbString + "[\\s]*([\\d]*)"; Pattern p = Pattern.compile(rex, Pattern.CASE_INSENSITIVE); Matcher m = p.matcher(UA); boolean rs = m.find(); if (rs) { System.out.println("Mobil OS is" + " BLACKBERRY " + m.group(1)); String version=m.group(1); osInfo.setVersion(version); osInfo.setOsTypeVersion(OSTYPE_BLACKBERRY+"_" + version); }else{ System.out.println("BLACKBERRY"); osInfo.setOsTypeVersion(OSTYPE_BLACKBERRY); } osInfo.setOsType(OSTYPE_BLACKBERRY); return osInfo; } if(UA.contains("LINUX")){//android if (StringUtil.isFind(UA, "\\bMobi", Pattern.CASE_INSENSITIVE)) { osInfo.setDeviceType(DEVICE_TYPE_PHONE); }else { osInfo.setDeviceType(DEVICE_TYPE_PAD); } Pattern p = Pattern.compile("U;\\s*(Adr[\\s]*)?(\\d[\\.\\d]*\\d)[\\s]*;",Pattern.CASE_INSENSITIVE); Matcher m = p.matcher(UA); boolean result = m.find(); String find_result = null; if (result) { find_result = m.group(2); } if(StringUtil.isNullOrEmpty(find_result)){ osInfo.setOsTypeVersion(OSTYPE_ANDROID); return osInfo; }else{ osInfo.setVersion(find_result); osInfo.setOsTypeVersion(OSTYPE_ANDROID+"_"+find_result); return osInfo; } } //UCWEB/2.0 (iOS; U; iPh OS 4_3_2; zh-CN; iPh4) if(UA.matches(".*((IOS)|(iPAD)).*(IPH).*")){ if (StringUtil.isFind(UA, "[\\s]*iPh[\\s]*", Pattern.CASE_INSENSITIVE)) { osInfo.setDeviceType(DEVICE_TYPE_PHONE); }else { osInfo.setDeviceType(DEVICE_TYPE_PAD); } Pattern p = Pattern.compile("U;\\s*(IPH[\\s]*)?(OS[\\s]*)?(\\d[\\._\\d]*\\d)[\\s]*;",Pattern.CASE_INSENSITIVE); Matcher m = p.matcher(UA); boolean result = m.find(); String find_result = null; if (result) { find_result = m.group(3); } if(StringUtil.isNullOrEmpty(find_result)){ osInfo.setOsTypeVersion(OSTYPE_IOS); osInfo.setOsType(OSTYPE_IOS); return osInfo; }else{ String version=find_result.replace("_", "."); osInfo.setVersion(version); osInfo.setOsTypeVersion(OSTYPE_IOS+"_"+version); osInfo.setOsType(OSTYPE_IOS); return osInfo; } } return osInfo; } /*** * 当移动端(手机或Pad)访问网页时获取移动端操作系统信息 * @param request * @return */ public static ClientOsInfo getMobileOsInfo(HttpServletRequest request){ String userAgent=request.getHeader("user-agent"); if(StringUtil.isNullOrEmpty(userAgent)){ userAgent=request.getHeader("User-Agent"); } ClientOsInfo info= getMobilOS(userAgent); if (null == info) {//为了通过单元测试 info = new ClientOsInfo(); } info.setUserAgent(userAgent); return info; }
相关推荐
使用其他浏览器访问,好嘛,IE跟safari都不兼容,返回错误”Invalid Date”。 想着估计是字符串格式的问题,改成’2016/11/11 11:11:11’再测试,结果正常,以为这样应该没问题了,再用手机浏览器继续访问,android...
代码首先获取用户代理字符串(`navigator.userAgent`),并检查其中是否包含"Android"或与iOS相关的模式。这样可以确定用户是使用Android设备、iOS设备还是其他设备。 2. **Android设备的处理**: 对于Android设备...
总之,通过JavaScript和User-Agent字符串,我们可以有效地检测用户的浏览器类型和版本,从而实现针对不同浏览器的兼容性处理。然而,随着现代浏览器对标准的更好支持,开发者应尽量使用标准技术,并依赖于特性检测,...
而苹果Safari浏览器则使用WebKit作为其渲染引擎,对Web标准支持较好,尤其是在iOS设备上。 遇到这种问题,开发者通常需要考虑以下几点: 1. **JavaScript兼容性**:JavaScript是网页开发中的重要组成部分,不同的...
例如,常见的User-Agent字符串可能包含"Firefox"、"Chrome"、"Safari"、"MSIE"(Internet Explorer)或"Trident"(代表旧版的IE内核)等关键词。我们可以使用jQuery的字符串操作函数来查找这些关键词,从而判断...
开发者可以根据这个字符串中的关键字来判断用户是否在微信浏览器中打开了页面。 #### 示例代码详解 下面是一段用于判断当前页面是否在微信浏览器中打开的示例代码: ```javascript if (browser.versions.mobile) ...
对于iOS设备,大多数用户使用的是内置的Safari浏览器;而在Android设备上,用户可能使用的是Chrome、Firefox或者其他定制的浏览器。 一旦识别出用户的设备和浏览器类型,微信就能做出正确的显示和下载操作。例如,...
3. 浏览器嗅探(Browser Sniffing):虽然不推荐,但有时开发者会直接通过用户代理字符串中特定的关键词来识别浏览器,如"MSIE"表示Internet Explorer。这种做法容易过时,因为新版本或新浏览器可能改变字符串格式。...
alert("您正在使用Safari浏览器!"); } else if (browserInfo.op) { alert("您正在使用Opera浏览器!"); } ``` #### 五、检测操作系统 除了检测浏览器类型外,有时还需要了解用户使用的是哪种操作系统。这同样...
首先,`Browser.js`是核心的JavaScript文件,它包含了对UA字符串的解析逻辑。UA字符串是浏览器发送给服务器的一个标识,包含了浏览器的详细信息。通过解析这个字符串,我们可以获取到如下的关键信息: 1. **浏览器...
轻松为流行的浏览器生成准确的用户代理字符串。 正在安装 npm install useragent-generator 用法 const ua = require ( 'useragent-generator' ) // ... 目录 Chrome合金 Chrome 火狐浏览器 ua.firefox....
从这个字符串中,我们可以看到设备类型(如iPhone)、操作系统(iOS 14.5)、Web渲染引擎(WebKit)以及浏览器版本(Safari 14.1)等信息。 然而,直接处理`userAgent`字符串可能会非常复杂,因为不同的浏览器有...
在iOS系统中,苹果的Safari浏览器和其他一些环境里,`new Date()`方法对于日期格式的解析有着较为严格的限制。例如,iOS系统中的JavaScript环境默认只支持ISO 8601日期格式(`YYYY-MM-DD`),并且日期和时间之间使用...
测试页面可以包含模板字符串、箭头函数、Promise、async/await等新特性,以检测其兼容性。 7. Web API测试:现代Web开发中,许多功能依赖于浏览器提供的API,如Fetch API、WebSocket、Web Storage等。测试页面应...
浏览器UserAgent字符串是每个网页请求时,客户端(通常是浏览器)发送到服务器的一段信息,用于标识客户端的类型、版本、操作系统、设备等详细信息。在分析用户行为、优化网站兼容性或者开发网络爬虫时,了解和理解...
浏览器用户代理(User Agent,简称UA)是网络浏览器发送到服务器的一个字符串,它包含了关于浏览器类型、版本、操作系统以及设备信息。这些信息对于网站开发者和分析人员来说至关重要,因为它们可以用于识别访问者所...
UserAgent字符串是网络浏览器在向服务器发送HTTP请求时附带的一种信息,用于标识浏览器的身份、版本、操作系统等关键信息。2021年9月的最新浏览器UserAgent更新反映了当前浏览器技术的发展趋势,包括对新标准的支持...
- webApp:通过检查userAgent字符串中是否不包含"Safari"来判断是否为web应用程序。 此外,为了提供语言支持,browser对象还包括了一个language属性,它通过获取navigator.browserLanguage或navigator.language属性...