2

我正在尝试实现几乎跨浏览器的书签功能,并在 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 # has no method'),但似乎没有什么能指出我正确的方向。

有谁知道为什么会这样?

4

3 回答 3

1

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

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

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

于 2013-07-19T13:53:24.437 回答
0

您应该使用wp_enqueue_script文档

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

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

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

于 2013-07-19T13:46:17.283 回答
0

addPanel 自 23 版以来已从 Firefox 中删除。但您可以改用标记:

<a href="http://stackoverflow.com" title="Stack Overflow" rel="sidebar">Bookmark me</a>
于 2016-04-10T20:51:09.563 回答