未捕获的TypeError:对象#没有方法’addPanel’

我正在尝试实现几乎跨浏览器的书签function,并在SO上找到了: 如何在我的网站上添加“添加到collections夹”按钮或链接?

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

 $(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.'); } }); });  

它适用于普通网页..如下所示: http : //jsfiddle.net/GXas4/

但是当我在wordpress模板中使用它时,在chrome中我得到一个像这样的js错误:

 Uncaught TypeError: Object # has no method 'addPanel' 

它不会在Firefox的控制台上返回错误,但也没有做任何事情。

SO上的很多post都有这样的问题(’未捕获的TypeError:对象#没有方法’),但似乎没有任何东西可以指向正确的方向。

有谁知道为什么会这样?

你正在使用的WordPress主题可能有一个id = sidebar的元素。

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

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

你应该使用wp_enqueue_script ( 文档 )

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

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

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

自第23版以来,addPanel已从Firefox中删除。但您可以使用标记代替:

 Bookmark me