【问题标题】:Fancybox gets javascript "not implemented" error in IE8 compatibility modeFancybox 在 IE8 兼容模式下出现 javascript“未实现”错误
【发布时间】:2010-02-12 17:53:38
【问题描述】:

当使用 jquery.fancybox-1.2.6.js 进行模式弹出时,它适用于我尝试过的所有平台,但设置为兼容模式时,除了 IE8。

当模态框尝试显示时,我在页面上收到一个 javascript“未实现”错误,使模态框永远不会弹出。它给出了 jquery.fancybox-1.2.6.js 中发生错误的行号(第 207 行),其中包含以下内容

 $("#fancy_content")[0].style.removeExpression("height");

我用警报语句做了一些老派的事实调查,似乎 .style 有效,它是“未实现”的 removeExpression 函数。

有人能解决这个问题吗?

【问题讨论】:

  • 很少有开源库可以在 IE8 兼容模式下工作。通常,只有在您的网站编码错误时,您才会进入兼容模式,因此人们不会尝试支持这种情况。

标签: javascript jquery internet-explorer-8 fancybox compatibility-mode


【解决方案1】:

我能够注释掉有问题的部分,它现在对我来说似乎工作正常:

//This was causing error in IE8 in compatibility mode
//            if (oldIE || ieQuirks) {
//                $("#fancy_content")[0].style.removeExpression("height");
//                $("#fancy_content")[0].style.removeExpression("width");
//            }

            if (pad > 0) {
                width += pad * 2;
                height += pad * 2;

                $("#fancy_content").css({
                    'top': pad + 'px',
                    'right': pad + 'px',
                    'bottom': pad + 'px',
                    'left': pad + 'px',
                    'width': 'auto',
                    'height': 'auto'
                });

//This was causing error in IE8 in compatibility mode
//                if (oldIE || ieQuirks) {
//                    $("#fancy_content")[0].style.setExpression('height', '(this.parentNode.clientHeight - ' + pad * 2 + ')');
//                    $("#fancy_content")[0].style.setExpression('width', '(this.parentNode.clientWidth - ' + pad * 2 + ')');
//                }

如果没有它,它似乎很奇怪,但也许它不适用于每个人,这取决于他们如何使用fancybox...

【讨论】:

    【解决方案2】:

    您已经发布了答案,但我认为有些东西可能值得尝试。

    .style.removeExpression 是我期望不实现的。 该代码可帮助 quirksmode 进行正确的尺寸调整。

    所以而不是

    $("#fancy_content")[0].style.removeExpression("height");
    

    尝试做

    $("#fancy_content").height('auto') 
    

    以后

    $("#fancy_content").height($(window).height() - pad * 2 );
    

    宽度也一样。

    我不确定尺寸设置在这里是否重要,当有很多内容并且 div 可能缩放过大时,它可能很重要。尝试使用大量内容或用萤火虫或其他东西粘贴大图像:)

    【讨论】:

      【解决方案3】:

      我知道这是一个老问题,但这是我的两分钱给后代......

      当我将网站从 jQuery 版本 1.4.2 升级到 1.8.3 时,我遇到了同样的问题。 问题似乎在于花哨的盒子如何通过以下代码确定 boxModel 是否存在:

      ieQuirks = $.browser.msie && !$.boxModel;

      在较新版本的 jQuery $.boxModel 中返​​回未定义(它在 1.3 中已被弃用),这是错误的,使得所有浏览器的测试都返回 true。使用 $.support.boxModel 而不是 $boxModel 为我解决了这个问题:

      ieQuirks = $.browser.msie && !$.support.boxModel;

      现在,除非用于预期的浏览器之一,否则不会输入这些代码块。

      【讨论】:

        最近更新 更多