【问题标题】:Function call doesn't work in IE8 (Object doesn't support this property or method)函数调用在 IE8 中不起作用(对象不支持此属性或方法)
【发布时间】:2014-09-19 21:21:30
【问题描述】:

我在 RequireJS 应用程序中使用 jQuery 调用如下函数。我在 IE8 上收到一条错误消息,指出“对象不支持此属性或方法”。

$(document).ready(function(){
     if($("body").hasClass("js-splash-overlay")){
        $("body").showSplashOverlay();
    }
});

飞溅覆盖模块。

'use strict';

define(['jquery'], function($){

    return function(){

        $.fn.showSplashOverlay = function() {
            var $overlayData = $(this).find(".js-splash-data").html(),
                $overlayContent = $("<div id=\"overlayHolder\" class=\"js-overlay-holder\">" + $overlayData + "</div>"),
                $formElement =  $("form")[0],
                options = {
                     autoOpen: false,
                     closeOnEscape: false,
                     draggable: false,
                     autoResize:false,
                     hide: {
                         effect: "fade",
                         duration: 150
                     },
                     modal: true,
                     resizable: false,
                     show: {
                         effect: "fade",
                         duration: 150
                     },
                     width: 620,
                     maxWidth: 700,
                     minHeight:50,
                     fluid: true
                };

                $overlayContent.dialog(options).dialog("open");

                setTimeout(function () {
                    $formElement.submit();
                }, 1500);

            return this;
        };
    }
});

首先,我认为调用发生时 jQuery 可能不存在。但是,当我alert($("body").attr("class")) 时,它清楚地显示了身体class。因此,很明显 jQuery 在调用时存在。

以上内容在 Chrome、FF 和其他最新浏览器上运行良好。不幸的是,我们必须支持 IE8 并要求修复该问题。

JQuery 版本:1.11

RequireJS 版本:2.1.11

非常感谢,非常感谢任何建议或指导。很高兴回答任何问题。

更新:问题是 IE8 不喜欢的恶意代码。它被称为splice。将其更改为 slice 似乎可以正常工作。

【问题讨论】:

  • 问题出现在showSplashOverlay 中的可能性非常高,不管是什么原因?
  • 究竟是哪一行引发了错误?
  • @adeneo 添加了spash覆盖模块以清除任何疑问
  • @SeanVieira 它在我调用 showSplashOverlay() 的那一行准确地抛出了错误
  • 那么执行showSplashOverlay的代码是如何加载的呢?

标签: jquery internet-explorer-8 requirejs slice splice


【解决方案1】:

最后,答案与 RequireJS 无关。我的 JS 中有一个 splice 命令,不知何故 IE8 不喜欢使用它。将splice 更改为 slice 后.. 它起作用了。

在搜索了早期 IE 版本的拼接问题后,我发现this 问题很常见,并且已经得到很多人的修复。

就我而言,我所要做的就是改变

return Array.prototype.splice.call(arguments, 0);

return Array.prototype.slice.call(arguments, 0);

【讨论】:

    【解决方案2】:

    关闭开发模式的 IE 浏览器在引用 console 对象时会抛出异常

    【讨论】:

    • 抱歉,我只为 Chrome 登录了 console.logged。对于 IE8,我提醒 jQuery 选择器查看 jQuery 是否存在。更改了问题以反映这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多