【问题标题】:IE8 breaks on if: Object doesn't support this property or methodIE8 在以下情况下中断:对象不支持此属性或方法
【发布时间】:2013-05-17 08:25:14
【问题描述】:

我正在 Web 应用程序中实现书签功能。在 FF 中可以正常工作(Chrome 不支持),但在 IE8 中会抛出错误,甚至在 IE9 和 IE10 中都无法使用。

这是代码(它在点击处理函数中,非常简单):

if(window.sidebar) {
    window.sidebar.addPanel("EXOP - GRD", $(this).data('href'), "");
} else if(window.external && window.external.AddFavorite) {
    window.external.AddFavorite($(this).data('href'), "EXOP - GRD");
} else if(window.opera) {
    $(this).attr({
        href:$(this).data('href'),
        title:"EXOP - GRD",
        rel:"sidebar"
    })
} else {
    console.log("Bookmark Action not supported");
    return false;
}

但是 IE8 在指向 if 的第 3 行中断,错误为 Object doesnt support This Property or Method。什么???

这些东西也应该在 IE9 和 10 中工作,不是吗?

任何帮助将不胜感激。

【问题讨论】:

    标签: javascript internet-explorer-8 bookmarks


    【解决方案1】:

    它不适用于 Firefox 以外的浏览器,因为它是 Firefox 特有的。

    Mozilla documentationwindow.sidebar

    规范 - “特定于 Mozilla。不属于任何标准。”

    解决方案?一种方法是确定正在使用哪个浏览器,并相应地分离代码。

    原因是您的代码的每个部分在非本地浏览器中运行时都会“中断”(因为对象在其本地浏览器之外不存在 - 例如在 IE 中,它永远不会到达您的 @987654323 @ 因为 if {} 的第一部分中的 Firefox 特定对象破坏了它,因此您的错误消息)。

    【讨论】:

    • 我知道。第一个if 用于Mozilla,第二个用于IE,第三个用于Opera,else 用于记录,不支持此功能。
    • @JohannesKlauß 你有没有办法改变你的if {} 声明,使Mozilla 部分落入else {},这样你就不必提及window.sidebar?或者判断是否正在使用 IE8,并跳过该语句?
    • 嗯,我已经试过了,但还是出现错误,指向window.external && window.external.AddFavorite之前的if,表示Object不支持这个属性或方法。
    • @JohannesKlauß 只需确定正在运行的浏览器并在其中运行适当的部分。我知道这很令人沮丧,但是每个部分都会在不同的浏览器中中断,因为条件在其原生浏览器之外不存在..
    • @JohannesKlauß 是的。浏览器兼容性的乐趣吧?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多