未捕获的类型错误:对象#<HTMLDivElement>没有方法'addPanel'

Uncaught TypeError: Object #<HTMLDivElement> has no method 'addPanel'

本文关键字:lt HTMLDivElement addPanel 有方法 gt 类型 错误 对象      更新时间:2023-09-26

我正在尝试实现一个几乎跨浏览器的书签功能,并在SO上发现了这一点:如何添加一个";添加到收藏夹";我网站上的按钮或链接?

现在,我正在使用@PHPst的答案。。

<script type="text/javascript">
$(function() {
    $("#bookmarkme").click(function() {
        if (window.sidebar) { // Mozilla Firefox Bookmark
            window.sidebar.addPanel(location.href,document.title,"");
        } else if( /*@cc_on!@*/false) { // IE Favorite
            window.external.AddFavorite(location.href,document.title); 
        } else if(window.opera && window.print) { // Opera Hotlist
            this.title=document.title;
            return true;
        } else { // webkit - safari/chrome
            alert('Press ' + (navigator.userAgent.toLowerCase().indexOf('mac') != - 1 ? 'Command/Cmd' : 'CTRL') + ' + D to bookmark this page.');
        }
    });
});
</script>

它在一个普通的网页上工作。。如下所示:http://jsfiddle.net/GXas4/

但是当我在wordpress模板中使用它时,在chrome中我会得到一个js错误,如下所示:

Uncaught TypeError: Object #<HTMLDivElement> has no method 'addPanel' 

它不会在firefox的控制台上返回错误,但也不会执行任何操作。

SO上的很多帖子都有这样的问题("Uncaught TypeError:Object#没有方法"),但似乎没有什么能给我指明正确的方向。

有人知道为什么会发生这种事吗?

您使用的WordPress主题可能有一个id=边栏的元素。

除非显式定义了具有相同名称的全局变量,否则将为每个具有id的元素创建一个全局变量。

因此,第一次测试是不可靠的。例如,即使在Chrome中,在stackoverflow页面上评估window.sidebar也是正确的,因为网站使用的元素具有这样的id。

您应该使用wp_enqueue_script(文档)

在该脚本之前可能不会调用您的依赖项。如果您将脚本排入队列,则可以使用首先加载依赖项

wp_enqueue_script( $handle, $path to file, array( jquery ));`

由于我在数组中放置了jQuery,它现在将在脚本之前加载jQuery。

addPanel自v.23起从Firefox中删除。但是您可以使用标记:

<a href="http://stackoverflow.com" title="Stack Overflow" rel="sidebar">Bookmark me</a>