未捕获的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