Add to browser favorites/bookmarks from JavaScript but for all browsers (mine doesn't work in Chrome)? Add to browser favorites/bookmarks from JavaScript but for all browsers (mine doesn't work in Chrome)? google-chrome google-chrome

Add to browser favorites/bookmarks from JavaScript but for all browsers (mine doesn't work in Chrome)?


Sorry, but there's no cross-browser way to do this. Your FF example is broken as well: It won't create a regular bookmark, but a bookmark set to be opened in the sidebar. You'd have to use the bookmark-service to create an actual bookmark, but this'll fail due to security restrictions.


After discovering - like Edison! - a bunch of ways this doesn't work, I eventually came across this page that says adding bookmarks via JS is explicitly disabled in Chrome. Unfortunately it does not explain why.

Update: I was asked to expand this answer by another SO user...

My links and buttons for this function all have a class="addbookmark" associated with them. When the user agent is Chrome, I use some jQuery to disable the links and explain why:

<script type="text/javascript" src="/scripts/jquery-1.4.2.min.js"></script> <script type="text/javascript" src="/scripts/bookmark.js"></script> <script>     title='A Label for this Bookmark, ie title of this page'; // for example, not really generated this way...     $jQuery(document).ready(function(){         // chrome does not permit addToFavorites() function by design         if (navigator.userAgent.toLowerCase().indexOf('chrome') > -1) {             $('.addbookmark').attr({                 title: 'This function is not available in Google Chrome. Click the star symbol at the end of the address-bar or hit Ctrl-D to create a bookmark.',                 href: 'javascript:return false'             })             .css({opacity: .25});       // dim the button/link         }     }); </script> 

And then elsewhere on the page:

 <td rowspan="2" class="noprint" style="width:24px;">      <a class="addbookmark" title="Save a Bookmark for this page"         href="javascript:addToFavorites(location.href,title)">         <img style="width:24px; height:24px; padding-top:2px;" src="/images/bookmark.gif"></a>  </td> 

... which is by no means perfect, but it seems one's options are fairly limited.

The version of jQuery isn't important, and it's up to you whether you want a local copy or hot-link to the google version. bookmark.js is pretty much exactly as per the OP's code:

$ cat /scripts/bookmark.js /* simple cross-browser script for adding a bookmark     source: http://stackoverflow.com/questions/992844/add-to-browser-favourites-bookmarks-from-javascript-but-for-all-browsers-mine-do */ function addToFavorites(url, name) {     if (window.sidebar) { // Mozilla Firefox         window.sidebar.addPanel(name, url, "");     } else if (window.external) { // IE         window.external.AddFavorite(url, name);     } else if (window.opera && window.print) {         window.external.AddFavorite(url, name);     } else {         alert("Sorry! Your browser doesn't appear to support this function.");     } } 

Hope that's useful.


I just tested this script in:

Win

  • IE 6.0, IE 7.0, IE 8.0
  • Firefox 2.0, Firefox 3.6.3
  • Safari 3.1.2, Safari 3.2.3
  • Opera 9.00
  • Google Chrome 8.0

Mac

  • Firefox 3.6.13
  • Safari 5.0.1
  • Opera 11.0
  • Google Chrome 8.0

    /** Copyright 2010 by GlamThumbs Team.** How To Use The Script:* add to your page this code between inside head tags* <script type="text/javascript" src="ATBookmarkApp.js"></script> * add anchor with void href like this: * <a href="javascript:void(0)" onClick="return BookmarkApp.addBookmark(this)">bookmark us</a> * */ATBookmarkApp = function () {    var isIEmac = false; /*@cc_on @if(@_jscript&&!(@_win32||@_win16)&& (@_jscript_version<5.5)) isIEmac=true; @end @*/    var isMSIE = (-[1,]) ? false : true;    var cjTitle = document.title;    var cjHref = location.href;    function hotKeys() {        var ua = navigator.userAgent.toLowerCase();        var str = '';        var isWebkit = (ua.indexOf('webkit') != - 1);        var isMac = (ua.indexOf('mac') != - 1);        if (ua.indexOf('konqueror') != - 1) {            str = 'CTRL + B'; // Konqueror        } else if (window.home || isWebkit || isIEmac || isMac) {            str = (isMac ? 'Command/Cmd' : 'CTRL') + ' + D'; // Netscape, Safari, iCab, IE5/Mac        }        return ((str) ? 'Press ' + str + ' to bookmark this page.' : str);    }    function isIE8() {        var rv = -1;        if (navigator.appName == 'Microsoft Internet Explorer') {            var ua = navigator.userAgent;            var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");            if (re.exec(ua) != null) {                rv = parseFloat(RegExp.$1);            }        }        if (rv > - 1) {            if (rv >= 8.0) {                return true;            }        }        return false;    }    function addBookmark(a) {        try {            if (typeof a == "object" && a.tagName.toLowerCase() == "a") {                a.style.cursor = 'pointer';                if ((typeof window.sidebar == "object") && (typeof window.sidebar.addPanel == "function")) {                    window.sidebar.addPanel(cjTitle, cjHref, ""); // Gecko                    return false;                   } else if (isMSIE && typeof window.external == "object") {                    if (isIE8()) {                        window.external.AddToFavoritesBar(cjHref, cjTitle); // IE 8                                        } else {                        window.external.AddFavorite(cjHref, cjTitle); // IE <=7                    }                    return false;                } else if (window.opera) {                    a.href = cjHref;                    a.title = cjTitle;                    a.rel = 'sidebar'; // Opera 7+                    return true;                } else {                    alert(hotKeys());                }            } else {                throw "Error occured.\r\nNote, only A tagname is allowed!";            }        } catch (err) {            alert(err);        }    }    return {        addBookmark : addBookmark    }}();