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

我有这个jjavascript调整iframes的大小:

$(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?

谢谢

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

您可以使用jQuery migrate来修补它,但最好转向特定于function的方法而不是浏览器特定的方法。 Modernizr非常适合这一点。

jquery建议反对$.browser …使用$.support代替..

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

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

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

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

  var is_safari = navigator.userAgent.indexOf("Safari") > -1; return is_safari || doc.compatMode == 'BackCompat' ? 

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

Chrome在userAgent字符串中包含“Chrome”和“Safari”。 Safari只有’Safari’。

使用jQuery检测Safari