【问题标题】:Javascript is not working in IEJavascript 在 IE 中不起作用
【发布时间】:2015-01-23 18:58:29
【问题描述】:

我正在编写一个 javascript,它将获取浏览器信息并将它们设置在 cookie 中,以便我将来可以使用它们。 setCookies() 是复杂的 javascript 函数,它将对导航器用户代理进行一些操作并确定浏览器。

这个功能好像在所有主流浏览器上都可以,但是在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>

【问题讨论】:

  • 是时候了!
  • 太棒了,javascript 现在可以在 IE 中使用了吗?让我们看看它是否也适用于新的 Spartan 浏览器:P
  • 这是一篇与浏览器检测相关的帖子:stackoverflow.com/questions/13478303/…希望对您有所帮助。
  • Wicket 可以帮你get browser information
  • pikand,我知道,您一定在谈论 getrequestcyclesettings().setgatherextendedbrowserinfo(true),但这似乎造成了一些问题,这就是为什么,我决定删除服务器端代码并​​执行它在javascript中。

标签: javascript html internet-explorer wicket internet-explorer-10


【解决方案1】:

在玩了一段时间后,我确实解决了这个问题。 原来,在较新版本的 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];
}

谢谢:)

【讨论】:

    猜你喜欢
    • 2017-11-16
    • 2012-01-20
    • 2016-01-21
    • 2015-06-17
    • 2012-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    相关资源
    最近更新 更多