Ajoutez aux favoris favoris / favoris de JavaScript mais pour tous les navigateurs (le mien ne fonctionne pas sur Chrome)?

Est-ce que quelqu'un peut aider, j'utilise ce qui suit pour ajouter un signet à IE et Firefox, mais ça ne fonctionne pas dans Chrome et je n'ai pas mon erreur msg en disant "non pris en charge" non plus …

Quelqu'un connait un bon script pour supporter TOUS les navigateurs ou du moins revenir et me dire qu'il n'est pas pris en charge, j'ai accès à jQuery – peut-être qu'il existe un moyen de détecter le navigateur

Je l'utilise actuellement et ça fonctionne pour IE et Firefox mais pas pour Chrome

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('not supported'); } 

Désolé, mais il n'y a pas de moyen de navigateur pour faire cela. Votre exemple de FF est aussi cassé: il ne créera pas de marque-marque régulière, mais un marque-page sera ouvert dans la barre latérale. Vous devriez utiliser le service bookmark pour créer un signet réel, mais cela échouera en raison de restrictions de sécurité.

Après avoir découvert – comme Edison! – De nombreuses façons, cela ne fonctionne pas, j'ai finalement rencontré cette page qui indique que l'ajout de signets via JS est explicitement désactivé dans Chrome. Malheureusement, cela n'explique pas pourquoi.

Mise à jour: on m'a demandé d'élargir cette réponse par un autre utilisateur SO …

Mes liens et boutons pour cette fonction ont tous une class="addbookmark" qui leur est associée. Lorsque l'agent utilisateur est Chrome, j'utilise certains jQuery pour désactiver les liens et expliquer pourquoi:

 <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> 

Et puis ailleurs sur la 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> 

… ce qui n'est absolument pas parfait, mais il semble que les options sont assez limitées.

La version de jQuery n'est pas importante, et c'est à vous de savoir si vous souhaitez une copie locale ou un lien direct vers la version de google . bookmark.js est à peu près exactement selon le code OP:

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

J'espère que cela est utile.

Je viens de tester ce script dans:

Gagner

  • 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 } }(); 

Vous pouvez toujours alerter le client pour appuyer sur ctr + D. Ceci est universel dans tous les navigateurs. C'est collant, mais aussi utile pour le client.

Je ne pouvais pas utiliser l'exemple ci-dessus. Quoi qu'il en soit, la réponse à la question initiale «ne fonctionne pas dans CHROME et je n'obtiens pas mon erreur msg disant« non pris en charge »soit …» est dû à la ligne

 else if (window.external) { // IE 

Chrome passe effectivement ce test et obéemment ne parvient pas à ajouter un signet. J'ai changé cette ligne pour

 else if(window.external && !window.chrome) // IE 

Et maintenant vous recevez le message «non pris en charge». J'ai effectivement supprimé ce message et appelé la fonction hotKeys () pour obtenir une alerte plus significative. J'ai dû apporter quelques modifications pour que cela fonctionne

 function showHotKeys() { 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 || isMac) { str = (isMac ? 'Command/Cmd' : 'CTRL') + ' + D'; // Netscape, Safari, iCab } return ((str) ? 'Press ' + str + ' to bookmark this page.' : str); } 

Ma démarche avec l'aide de jQuery.
Testé dans IE 6-8, Fx 1-25, Opera 7-14. Décompose gracieusement Chrome, Saf.

CSS:

 .no-js .link-bookmark { display: none; } 

JS:

 /* ... Bookmark current page ... */ var $favLink = $('.link-bookmark'); if ( window.sidebar || 'AddFavorite' in window.external || window.opera ) { $favLink.show(); } // add a 'rel' attrib if Op 7+ && Fx >= 23 if ( window.opera || window.sidebar ) { var $favLinkAttrRel = $favLink.attr('rel'); if ( typeof $favLinkAttrRel !== "undefined" && $favLinkAttrRel !== false ) { // don't overwrite the rel attr if already set $favLink.attr('rel', 'sidebar'); } } $favLink.click(function( event ) { //event.preventDefault(); // prevent the anchor tag from sending the user off to the link var url = this.href; var $title = $('title').text(); // IE Favorite if ( 'AddFavorite' in window.external ) { event.preventDefault(); window.external.AddFavorite(url, $title); } // Fx <23 Bookmark, 'addPanel' not available from v23 on any more. else if ( 'addPanel' in window.sidebar ) { event.preventDefault(); window.sidebar.addPanel($title, url, ''); } // Op 7+ && Fx >= 23 else if ( window.opera || window.sidebar ) { $favLink.attr('title', $title); return true; // do nothing - the rel="sidebar" should do the trick } // for Saf, Konq etc - browsers who do not support bookmarking scripts else { event.preventDefault(); alert('Your browser doesn\'t support the bookmark functionality,' + 'please add this page to your bookmarks manually.'); } });