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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章