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