admin管理员组

文章数量:1558103

IE浏览器存在多种兼容问题

掌握技巧,不再害怕


用IE浏览器 打开网站首页,为何首页显示的是手机端页面?

注意: 当前使用的是 IE8及其以下版本ie浏览器


下面给出名称为:CheckMobile.java文件中部分代码(编译之前),具体示下:

JAVA代码块,如下:
...部分省略...

package com.fh.util;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 查看是否为手机登陆
 * 
 */
public class CheckMobile {
	// \b 是单词边界(连着的两个(字母字符 与 非字母字符) 之间的逻辑上的间隔),
	// 字符串在编译时会被转码一次,所以是 "\\b"
	// \B 是单词内部逻辑间隔(连着的两个字母字符之间的逻辑上的间隔)
	static String phoneReg = "\\b(ip(hone|od)|android|opera m(ob|in)i"
			+ "|windows (phone|ce)|blackberry"
			+ "|s(ymbian|eries60|amsung)|p(laybook|alm|rofile/midp"
			+ "|laystation portable)|nokia|fennec|htc[-_]"
			+ "|mobile|up.browser|[1-4][0-9]{2}x[1-4][0-9]{2})\\b";
	static String tableReg = "\\b(ipad|tablet|(Nexus 7)|up.browser"
			+ "|[1-4][0-9]{2}x[1-4][0-9]{2})\\b";

	// 移动设备正则匹配:手机端、平板
	static Pattern phonePat = Pattern.compile(phoneReg,
			Pattern.CASE_INSENSITIVE);
	static Pattern tablePat = Pattern.compile(tableReg,
			Pattern.CASE_INSENSITIVE);

	/**
	 * 检测是否是移动设备访问
	 * 
	 * @Title: check
	 * @Date : 2014-7-7 下午01:29:07
	 * @param userAgent
	 *            浏览器标识
	 * @return true:移动设备接入,false: pc端接入
	 */
	public static boolean check(String userAgent) {
		if (null == userAgent) {
			userAgent = "";
		}
		// 匹配
		Matcher matcherPhone = phonePat.matcher(userAgent);
		Matcher matcherTable = tablePat.matcher(userAgent);
		boolean flag_table =matcherTable.find();
		//System.out.println(flag_table);                    //ie8下, 返回结果: true
		//boolean flag_table2 =matcherTable.find();          //注意问题:对比前后结果
		//System.out.println(flag_table2);                   //ie8下, 返回结果: false
		boolean flag_Phone =matcherPhone.find();
		//System.out.println(flag_Phone);		             //ie8下, 返回结果: false
		//boolean flag_Phone2 =matcherPhone.find();
		//System.out.println(flag_Phone2);                   //ie8下, 返回结果: false
		
		if ( flag_Phone ) {
			return true;
		} else {
			if ( flag_table ){
			return true;}
		}
			return false;
	}

}

...部分省略...

注意:

  • 通过上面的代码注释部分,经过测试,在后台打印日志中发现:
    同样的代码“matcherTable.find()”,在经过“System.out.println(flag_table)”打印操作之后,值就被改变为false了,然后在ie8下,才能正常显示PC端首页;
  • 相反,如果取消或注释掉所有的matcherTable.find()打印操作,那么matcherTable.find()的返回值将一直为true,也就是判断ie8为移动端设备,所以显示的是手机端首页;
    这个问题真的很奇葩,暂时也没能找到别的解决办法;

临时解决办法:
  • 执行一下“System.out.println(flag_table)”打印操作,也无妨。但终究不是解决之道。

另外,在360浏览器的兼容模式下,因为用户浏览器设置选择的IE内核不同,显示的效果也会不一样,具体演示,此处省略不做深究。。。

参考讨论:
为什么我的ie浏览器打开不分页面时变成手机版了呢 【https://answers.microsoft】


以上就是关于“IE8 打开网站首页显示的却是手机网站”的全部内容。

本文标签: 却是首页手机网站网站