`

ios Safari浏览器不支持 js 复制字符串

阅读更多

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;
    }

 

 

  • 大小: 11.7 KB
  • 大小: 262.4 KB
0
0
分享到:
评论

相关推荐

    JS IOS/iPhone的Safari浏览器不兼容Javascript中的Date()问题如何解决

    使用其他浏览器访问,好嘛,IE跟safari都不兼容,返回错误”Invalid Date”。 想着估计是字符串格式的问题,改成’2016/11/11 11:11:11’再测试,结果正常,以为这样应该没问题了,再用手机浏览器继续访问,android...

    ios 不支持 iframe 的完美解决方法(兼容iOS&安卓)

    代码首先获取用户代理字符串(`navigator.userAgent`),并检查其中是否包含"Android"或与iOS相关的模式。这样可以确定用户是使用Android设备、iOS设备还是其他设备。 2. **Android设备的处理**: 对于Android设备...

    使用js检测当前浏览器版本,多浏览器类型和版本号检测

    总之,通过JavaScript和User-Agent字符串,我们可以有效地检测用户的浏览器类型和版本,从而实现针对不同浏览器的兼容性处理。然而,随着现代浏览器对标准的更好支持,开发者应尽量使用标准技术,并依赖于特性检测,...

    移动端页面只能在QQ浏览器、微信、苹果浏览器中打开

    而苹果Safari浏览器则使用WebKit作为其渲染引擎,对Web标准支持较好,尤其是在iOS设备上。 遇到这种问题,开发者通常需要考虑以下几点: 1. **JavaScript兼容性**:JavaScript是网页开发中的重要组成部分,不同的...

    Jquery实现浏览器嗅探器特效

    例如,常见的User-Agent字符串可能包含"Firefox"、"Chrome"、"Safari"、"MSIE"(Internet Explorer)或"Trident"(代表旧版的IE内核)等关键词。我们可以使用jQuery的字符串操作函数来查找这些关键词,从而判断...

    JS判断是否在微信浏览器打开

    开发者可以根据这个字符串中的关键字来判断用户是否在微信浏览器中打开了页面。 #### 示例代码详解 下面是一段用于判断当前页面是否在微信浏览器中打开的示例代码: ```javascript if (browser.versions.mobile) ...

    微信扫一扫智能判断IOS和Android

    对于iOS设备,大多数用户使用的是内置的Safari浏览器;而在Android设备上,用户可能使用的是Chrome、Firefox或者其他定制的浏览器。 一旦识别出用户的设备和浏览器类型,微信就能做出正确的显示和下载操作。例如,...

    检测浏览器相关信息

    3. 浏览器嗅探(Browser Sniffing):虽然不推荐,但有时开发者会直接通过用户代理字符串中特定的关键词来识别浏览器,如"MSIE"表示Internet Explorer。这种做法容易过时,因为新版本或新浏览器可能改变字符串格式。...

    javascript 检测浏览器类型和版本的代码.docx

    alert("您正在使用Safari浏览器!"); } else if (browserInfo.op) { alert("您正在使用Opera浏览器!"); } ``` #### 五、检测操作系统 除了检测浏览器类型外,有时还需要了解用户使用的是哪种操作系统。这同样...

    HTML 浏览器 UA 分析工具源码

    首先,`Browser.js`是核心的JavaScript文件,它包含了对UA字符串的解析逻辑。UA字符串是浏览器发送给服务器的一个标识,包含了浏览器的详细信息。通过解析这个字符串,我们可以获取到如下的关键信息: 1. **浏览器...

    useragent-generator:轻松为流行的浏览器生成正确的用户代理字符串

    轻松为流行的浏览器生成准确的用户代理字符串。 正在安装 npm install useragent-generator 用法 const ua = require ( 'useragent-generator' ) // ... 目录 Chrome合金 Chrome 火狐浏览器 ua.firefox....

    JS 获取移动终端浏览器版本信息

    从这个字符串中,我们可以看到设备类型(如iPhone)、操作系统(iOS 14.5)、Web渲染引擎(WebKit)以及浏览器版本(Safari 14.1)等信息。 然而,直接处理`userAgent`字符串可能会非常复杂,因为不同的浏览器有...

    微信小程序new Date()方法失效问题解决

    在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

    浏览器UserAgent字符串是每个网页请求时,客户端(通常是浏览器)发送到服务器的一段信息,用于标识客户端的类型、版本、操作系统、设备等详细信息。在分析用户行为、优化网站兼容性或者开发网络爬虫时,了解和理解...

    浏览器UA信息5万个包括有详细浏览器及版本号参数的一百个UA包括手机winLinux等

    浏览器用户代理(User Agent,简称UA)是网络浏览器发送到服务器的一个字符串,它包含了关于浏览器类型、版本、操作系统以及设备信息。这些信息对于网站开发者和分析人员来说至关重要,因为它们可以用于识别访问者所...

    2021年9月最新浏览器useragent

    UserAgent字符串是网络浏览器在向服务器发送HTTP请求时附带的一种信息,用于标识浏览器的身份、版本、操作系统等关键信息。2021年9月的最新浏览器UserAgent更新反映了当前浏览器技术的发展趋势,包括对新标准的支持...

    js智能获取浏览器版本UA信息的方法

    - webApp:通过检查userAgent字符串中是否不包含"Safari"来判断是否为web应用程序。 此外,为了提供语言支持,browser对象还包括了一个language属性,它通过获取navigator.browserLanguage或navigator.language属性...

Global site tag (gtag.js) - Google Analytics