Javascript 在 IE 中不工作
Javascript is not working in IE
我正在写一个javascript,它将获取浏览器信息并将它们设置在cookie 中,以便我将来可以使用它们。
setCookies() 是复杂的 javascript 函数,它将对 navoigator 用户代理进行一些操作并确定浏览器。
这个功能似乎适用于所有主流浏览器,但它不适用于 IE (11, 10, 9, 8 , 7),我不知道为什么。
其他信息:我正在开发 Apache wicket 应用程序,版本 1.4.19。
这里是Javascript函数
<script type="text/javascript">
function setCookies() {
var browser;
var version;
var click_ev = document.createEvent("MouseEvents");
click_ev.initEvent("click", true /* bubble */, true /* cancelable */);
document.cookie = "user_agent=" + navigator.userAgent + "; path=/";
document.cookie = "navigator_app_platform=" + navigator.platform
+ "; path=/";
var platform = navigator.platform;
if (platform == "iPad" || platform == "iPhone" || platform == "iPod"
|| platform == "iPod touch") { // For iPhones iPads and iPods
var userAgent = navigator.userAgent;
var chromeIndex = userAgent.indexOf("criOS");
var opera = userAgent.indexOf("OPiOS");
var ucIndex = userAgent.indexOf("UCBrowser");
var coast = userAgent.indexOf("Coast");
var mercury = userAgent.indexOf("Mercury");
var safari = userAgent.indexOf("Safari");
var webkit = userAgent.indexOf("AppleWebKit");
// Chrome detection
if(chromeIndex > 0) {
browser = "chrome";
var arr = userAgent.split("criOS/");
arr = arr[1].split(".");
version = arr[0];
}
// Safari detection
else if(opera < 0 && ucIndex < 0 && coast < 0 && mercury < 0 && safari > 0 && webkit > 0) {
browser = "safari";
var arr = userAgent.split("AppleWebKit/");
arr = arr[1].split(".");
version = arr[0];
} else {
browser = "unknown";
version = -1;
}
} else if(platform == "Win32" || platform == "MacIntel") { // For windows and mac
// Browser detection
var isOpera = !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
// Opera 8.0+ (UA detection to detect Blink/v8-powered Opera)
var isFirefox = typeof InstallTrigger !== 'undefined'; // Firefox 1.0+
var isSafari = Object.prototype.toString.call(window.HTMLElement).indexOf('Constructor') > 0;
// At least Safari 3+: "[object HTMLElementConstructor]"
var isChrome = !!window.chrome && !isOpera; // Chrome 1+
var isIE = /*@cc_on!@*/false || !!document.documentMode; // At least IE6
if (isOpera) {
browser = "opera";
} else if (isFirefox) {
browser = "firefox";
} else if (isChrome) {
browser = "chrome";
} else if (isIE) {
browser = "ie";
} else if (isSafari) {
browser = "safari";
} else {
browser = "unknown";
}
if (browser == "firefox") {
var arr = navigator.userAgent.split("Firefox/");
arr = arr[1].split(".");
version = arr[0];
} else if (browser == "chrome") {
var arr = navigator.userAgent.split("Chrome/");
arr = arr[1].split(".");
version = arr[0];
} else if (browser == "ie") {
var arr = navigator.userAgent.split("MSIE ");
arr = arr[1].split(".");
version = arr[0];
} else if (browser == "safari") {
var arr = navigator.userAgent.split("AppleWebKit/");
arr = arr[1].split(" ");
arr = arr[0].split(".");
version = arr[0];
} else if (browser == "opera") {
var arr = navigator.userAgent.split("OPR/");
arr = arr[1].split(".");
version = arr[0];
} else if (browser == "unknown") {
version = -1;
}
} else if(platform == "Android" || platform == "Linux armv7l") { // For android
var userAgent = navigator.userAgent;
var chromeIndex = userAgent.indexOf("Chrome");
var opera = userAgent.indexOf("OPR");
var ucIndex = userAgent.indexOf("UCBrowser");
var coast = userAgent.indexOf("Coast");
var firefox = userAgent.indexOf("Firefox");
// Chrome detection
if(chromeIndex > 0 && opera < 0 && ucIndex < 0 && coast < 0) {
browser = "chrome";
var arr = userAgent.split("Chrome/");
arr = arr[1].split(".");
version = arr[0];
} else if(firefox > 0) { // Firefox detection
browser = "firefox";
var arr = userAgent.split("Firefox/");
arr = arr[1].split(".");
version = arr[0];
} else if(opera > 0) { // Opera detection
browser = "opera";
var arr = userAgent.split("OPR/");
arr = arr[1].split(".");
version = arr[0];
} else { // Unknown browser
browser = "unknown";
version = -1;
}
} else { // For other platforms
version = -1;
browser = "other_platform";
}
document.cookie = "browser_version=" + version + "; path=/";
document.cookie = "browser_name=" + browser + "; path=/";
document.getElementById("redirect").dispatchEvent(click_ev);
}
</script>
经过一番尝试,我确实解决了这个问题。
事实证明,在较新版本的 IE 中,userAgent 在每个版本中都不相同。
我的 IE10 中的用户代理不包含 "MSIE",我试图通过 "MSIE" 拆分 userAgent,结果出现空指针情况。
所以IE版本检测脚本从:
if (browser == "ie") {
var arr = navigator.userAgent.split("MSIE ");
arr = arr[1].split(".");
version = arr[0];
}
收件人:
if (browser == "ie") {
var v1 = navigator.userAgent.indexOf("MISE");
var v2 = navigator.userAgent.indexOf("rv:");
if(v1 > 0) {
var arr = navigator.userAgent.split("MSIE ");
arr = arr[1].split(".");
version = arr[0];
} else if(v2 > 0) {
var arr = navigator.userAgent.split("rv:");
arr = arr[1].split(".");
version = arr[0];
}
谢谢:)
我正在写一个javascript,它将获取浏览器信息并将它们设置在cookie 中,以便我将来可以使用它们。 setCookies() 是复杂的 javascript 函数,它将对 navoigator 用户代理进行一些操作并确定浏览器。
这个功能似乎适用于所有主流浏览器,但它不适用于 IE (11, 10, 9, 8 , 7),我不知道为什么。
其他信息:我正在开发 Apache wicket 应用程序,版本 1.4.19。
这里是Javascript函数
<script type="text/javascript">
function setCookies() {
var browser;
var version;
var click_ev = document.createEvent("MouseEvents");
click_ev.initEvent("click", true /* bubble */, true /* cancelable */);
document.cookie = "user_agent=" + navigator.userAgent + "; path=/";
document.cookie = "navigator_app_platform=" + navigator.platform
+ "; path=/";
var platform = navigator.platform;
if (platform == "iPad" || platform == "iPhone" || platform == "iPod"
|| platform == "iPod touch") { // For iPhones iPads and iPods
var userAgent = navigator.userAgent;
var chromeIndex = userAgent.indexOf("criOS");
var opera = userAgent.indexOf("OPiOS");
var ucIndex = userAgent.indexOf("UCBrowser");
var coast = userAgent.indexOf("Coast");
var mercury = userAgent.indexOf("Mercury");
var safari = userAgent.indexOf("Safari");
var webkit = userAgent.indexOf("AppleWebKit");
// Chrome detection
if(chromeIndex > 0) {
browser = "chrome";
var arr = userAgent.split("criOS/");
arr = arr[1].split(".");
version = arr[0];
}
// Safari detection
else if(opera < 0 && ucIndex < 0 && coast < 0 && mercury < 0 && safari > 0 && webkit > 0) {
browser = "safari";
var arr = userAgent.split("AppleWebKit/");
arr = arr[1].split(".");
version = arr[0];
} else {
browser = "unknown";
version = -1;
}
} else if(platform == "Win32" || platform == "MacIntel") { // For windows and mac
// Browser detection
var isOpera = !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
// Opera 8.0+ (UA detection to detect Blink/v8-powered Opera)
var isFirefox = typeof InstallTrigger !== 'undefined'; // Firefox 1.0+
var isSafari = Object.prototype.toString.call(window.HTMLElement).indexOf('Constructor') > 0;
// At least Safari 3+: "[object HTMLElementConstructor]"
var isChrome = !!window.chrome && !isOpera; // Chrome 1+
var isIE = /*@cc_on!@*/false || !!document.documentMode; // At least IE6
if (isOpera) {
browser = "opera";
} else if (isFirefox) {
browser = "firefox";
} else if (isChrome) {
browser = "chrome";
} else if (isIE) {
browser = "ie";
} else if (isSafari) {
browser = "safari";
} else {
browser = "unknown";
}
if (browser == "firefox") {
var arr = navigator.userAgent.split("Firefox/");
arr = arr[1].split(".");
version = arr[0];
} else if (browser == "chrome") {
var arr = navigator.userAgent.split("Chrome/");
arr = arr[1].split(".");
version = arr[0];
} else if (browser == "ie") {
var arr = navigator.userAgent.split("MSIE ");
arr = arr[1].split(".");
version = arr[0];
} else if (browser == "safari") {
var arr = navigator.userAgent.split("AppleWebKit/");
arr = arr[1].split(" ");
arr = arr[0].split(".");
version = arr[0];
} else if (browser == "opera") {
var arr = navigator.userAgent.split("OPR/");
arr = arr[1].split(".");
version = arr[0];
} else if (browser == "unknown") {
version = -1;
}
} else if(platform == "Android" || platform == "Linux armv7l") { // For android
var userAgent = navigator.userAgent;
var chromeIndex = userAgent.indexOf("Chrome");
var opera = userAgent.indexOf("OPR");
var ucIndex = userAgent.indexOf("UCBrowser");
var coast = userAgent.indexOf("Coast");
var firefox = userAgent.indexOf("Firefox");
// Chrome detection
if(chromeIndex > 0 && opera < 0 && ucIndex < 0 && coast < 0) {
browser = "chrome";
var arr = userAgent.split("Chrome/");
arr = arr[1].split(".");
version = arr[0];
} else if(firefox > 0) { // Firefox detection
browser = "firefox";
var arr = userAgent.split("Firefox/");
arr = arr[1].split(".");
version = arr[0];
} else if(opera > 0) { // Opera detection
browser = "opera";
var arr = userAgent.split("OPR/");
arr = arr[1].split(".");
version = arr[0];
} else { // Unknown browser
browser = "unknown";
version = -1;
}
} else { // For other platforms
version = -1;
browser = "other_platform";
}
document.cookie = "browser_version=" + version + "; path=/";
document.cookie = "browser_name=" + browser + "; path=/";
document.getElementById("redirect").dispatchEvent(click_ev);
}
</script>
经过一番尝试,我确实解决了这个问题。 事实证明,在较新版本的 IE 中,userAgent 在每个版本中都不相同。
我的 IE10 中的用户代理不包含 "MSIE",我试图通过 "MSIE" 拆分 userAgent,结果出现空指针情况。
所以IE版本检测脚本从:
if (browser == "ie") {
var arr = navigator.userAgent.split("MSIE ");
arr = arr[1].split(".");
version = arr[0];
}
收件人:
if (browser == "ie") {
var v1 = navigator.userAgent.indexOf("MISE");
var v2 = navigator.userAgent.indexOf("rv:");
if(v1 > 0) {
var arr = navigator.userAgent.split("MSIE ");
arr = arr[1].split(".");
version = arr[0];
} else if(v2 > 0) {
var arr = navigator.userAgent.split("rv:");
arr = arr[1].split(".");
version = arr[0];
}
谢谢:)