【问题标题】:"Add to favorites" with JavaScript in Opera [duplicate]在 Opera 中使用 JavaScript “添加到收藏夹” [重复]
【发布时间】:2010-05-06 14:29:07
【问题描述】:

如何在 Opera 中完成这项工作?我为 Opera 找到了这段代码,但它对我不起作用:

 function AddToFavorites(title, url) {

    if (window.sidebar) { // Mozilla Firefox Bookmark
        window.sidebar.addPanel(title, url,"");
        return false;
    } 
    else if( window.external ) { // IE Favorite
        window.external.AddFavorite( url, title); 
        return false;
    }
    else if(window.opera && window.print) { // Opera Hotlist
                var elem = document.createElement('a');
                elem.setAttribute('href',url);
                elem.setAttribute('title',title);
                elem.setAttribute('rel','sidebar');
                elem.click();
                return false;
    }
 }

Dragonfly 错误控制台是静默的,没有发生错误。

【问题讨论】:

    标签: javascript opera


    【解决方案1】:

    如果你坚持,那就不要动态生成冗余链接:

     <a href="http://real.url.example.com" title="Bookmark me, pleaeease!" 
        rel="sidebar"
        onclick="return !addToFav(this.href,this.title)">
    

    但是请不要这样做。

    作为 Opera 用户,我会很感激没有推动这种时尚 - 如果我愿意,我可以轻松地将标签拖放到书签栏/面板/快速页面。

    【讨论】:

      【解决方案2】:

      Opera 强制执行相同的用户事件要求以允许添加书签,因此您的代码将无法工作,因为用户从未点击过您刚刚创建的链接.

      你需要更多这样的东西:

      function AddToFavorites(obj, title, url){
        if(window.sidebar){
          // Mozilla Firefox Bookmark
          window.sidebar.addPanel(title, url,"");
          return false;
        } else if(window.external){
          // IE Favorite
          window.external.AddFavorite( url, title);
          return false;
        } else if(window.opera && window.print){
          //Opera Hotlist
          obj.setAttribute('href',url);
          obj.setAttribute('title',title);
          obj.setAttribute('rel','sidebar');
          obj.click();
          return false;
        }
      }
      

      调用

      <a href="#" onclick="AddToFavorites(this, 'your title', 'your url');">Bookmark This Page</a>
      

      (随意更不显眼,我只是想表明用户事件的要求)

      【讨论】:

        【解决方案3】:

        在 Opera 10 中获得“添加到收藏夹”链接的方法是动态添加 rel 属性到链接

        $('#add_to_favs').attr('rel','sidebar');
        

        【讨论】:

          【解决方案4】:

          以下代码适用于 Opera 8.54。它不适用于 9.27 或 9.63(我仅有的两个可用于测试的其他版本)。在 9.27 和 9.63 中,它只是将您导航到 Yahoo!:

          var url = 'http://www.yahoo.com/';
          var title = 'Yahoo!';
          var elem = document.createElement('a');
          elem.setAttribute('href', url);
          elem.setAttribute('title', title);
          elem.setAttribute('rel', 'sidebar');
          elem.click();
          

          怀疑他们删除了在没有用户启动的情况下添加书签/收藏夹的功能。由于您已经可以使用 window.location 强制浏览器导航到新 URL,这可能不被视为 DoS 漏洞。

          如果用户点击链接,以下操作正常:

          var url = 'http://www.yahoo.com/';
          var title = 'Yahoo!';
          var elem = document.createElement('a');
          elem.setAttribute('href', url);
          elem.setAttribute('title', title);
          elem.setAttribute('rel', 'sidebar');
          elem.appendChild(document.createTextNode('Add Bookmark'));
          document.getElementsByTagName('body')[0].appendChild(elem);
          

          此外,window.external.AddFavorite(url, title); 不再允许在 Internet Explorer 8 Beta 2 中添加非用户发起的收藏夹。但是,如果您将其作为链接的 onclick 事件包含,它可以正常工作:

          <a href="http://www.yahoo.com/" title="Yahoo!" onclick="window.external.AddFavorite(this.href, this.title);return false;">Add to Favorites</a>
          

          Firefox 2.0.0.18 和 3.0.4 目前都支持非用户发起的书签添加,但如果他们在未来的版本中也将其删除,我不会感到惊讶。

          我认为,在不点击链接或采取明确行动的情况下,试图强迫网站访问者添加收藏夹/书签被认为是一种糟糕的形式,而且有点粗鲁。仅仅访问一个网站并不足以迫使这些访问者为其添加收藏夹/书签。

          【讨论】:

            猜你喜欢
            • 2011-03-02
            • 1970-01-01
            • 1970-01-01
            • 2013-08-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-03-20
            相关资源
            最近更新 更多