未捕获的TypeError:无法读取未定义的属性'safari'

时间:2013-02-21 20:36:17

标签: javascript jquery

我有这个javascript来调整iframe:

 $(function () {

            var iFrames = $('iframe');

            function iResize() {

                for (var i = 0, j = iFrames.length; i < j; i++) {
                    iFrames[i].style.height = iFrames[i].contentWindow.document.body.offsetHeight + 'px';
                }
            }

            if ($.browser.safari || $.browser.opera) {

                iFrames.load(function () {
                    setTimeout(iResize, 0);
                });

                for (var i = 0, j = iFrames.length; i < j; i++) {
                    var iSource = iFrames[i].src;
                    iFrames[i].src = '';
                    iFrames[i].src = iSource;
                }

            } else {
                iFrames.load(function () {
                    this.style.height = this.contentWindow.document.body.offsetHeight + 'px';
                });
            }

        });

在Chrome中,它在这里遇到了麻烦:

 if ($.browser.safari || $.browser.opera) {

我有什么理由得到这个错误吗?我正在使用最新的JQuery?

由于

4 个答案:

答案 0 :(得分:13)

您可能正在使用jQuery 1.9或更高版本,在这种情况下{1.3}自从1.3开始被弃用后才被正式删除。

您可以使用$.browser对其进行修补,但最好采用特定于功能的方法,而不是采用特定于浏览器的方法。 jQuery migrate对此非常有用。

答案 1 :(得分:3)

jquery建议不要使用$.browser ...使用$.support代替..

如果$.browser.safari(或Opera或任何您尝试访问的内容)不存在,则会抛出错误。检查是否undefined

答案 2 :(得分:2)

今天我注意到这个问题,客户在没有告诉我的情况下升级了。

我发布的快速修复(不使用Modernizr,这可能是更好的方法)

在scrollTo.js文件中,转到第85行并将其设为:

        var is_safari = navigator.userAgent.indexOf("Safari") > -1;

        return is_safari || doc.compatMode == 'BackCompat' ?

答案 3 :(得分:0)

您可以尝试检查userAgent字符串:

  

Chrome在userAgent字符串中包含“Chrome”和“Safari”。苹果浏览器   只有'Safari'。

Detect Safari using jQuery