Добавить в браузер избранное / закладки из JavaScript, но для всех браузеров (мой не работает в Chrome)? - PullRequest
27 голосов
/ 14 июня 2009

Может кто-нибудь помочь, я использую следующее для добавления закладки в IE и Firefox, но она не работает в Chrome, и я не получаю сообщение об ошибке с надписью «не поддерживается».

Кто-нибудь знает хороший скрипт для поддержки ВСЕХ браузеров или, по крайней мере, чтобы вернуться и сказать мне, что он не поддерживается, у меня есть доступ к jQuery - возможно, есть какой-то способ обнаружить браузер

В настоящее время я использую это, и оно работает для IE и Firefox, но не для 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');
}

Ответы [ 6 ]

13 голосов
/ 14 июня 2009

Извините, но нет кросс-браузерного способа сделать это. Ваш пример FF также не работает: он не создаст обычную закладку, а будет установлен на боковой панели. Вам необходимо использовать сервис закладок для создания фактической закладки, но это не удастся из-за ограничений безопасности.

6 голосов
/ 07 марта 2011

После открытия - как Эдисон! - куча способов, которыми это не работает, я в итоге наткнулся на эту страницу , в которой говорится, что добавление закладок через JS явно отключено в Chrome К сожалению, это не объясняет, почему.

Обновление: меня попросили расширить этот ответ от другого пользователя SO ...

С моими ссылками и кнопками для этой функции связан class="addbookmark". Когда пользовательским агентом является Chrome, я использую некоторые jQuery для отключения ссылок и объясняю, почему:

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

А затем в другом месте на странице:

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

... что ни в коем случае не идеально, но кажется, что его возможности довольно ограничены.

Версия jQuery не важна, и вам решать, хотите ли вы получить локальную копию или ссылку на версию Google . bookmark.js в точности соответствует коду ОП:

$ cat /scripts/bookmark.js 
/* simple cross-browser script for adding a bookmark 
    source: /772034/dobavit-v-brauzer-izbrannoe-zakladki-iz-javascript-no-dlya-vseh-brauzerov-moi-ne-rabotaet-v-chrome 
*/ 
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."); 
    } 
} 

Надеюсь, это полезно.

5 голосов
/ 03 января 2011

Я только что проверил этот скрипт в:

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
  • Опера 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
        }
    }();
    
4 голосов
/ 22 июня 2010

Вы всегда можете предупредить клиента, нажав Ctrl + D. Это универсально для всех браузеров. Это липко, но так же полезно для клиента.

2 голосов
/ 10 марта 2012

Я не смог заставить работать приведенный выше пример. В любом случае ответ на исходный вопрос «он не работает в ХРОМЕ, и я не получаю сообщение об ошибке, говорящее« не поддерживается »либо ..», связан со строкой

else if (window.external) { // IE 

chrome фактически проходит этот тест, а затем явно не может добавить закладку. Я изменил эту строку на

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

и теперь вы получаете сообщение «не поддерживается». Я фактически удалил это сообщение и вызвал функцию hotKeys (), чтобы получить более значимое предупреждение. Мне пришлось сделать несколько изменений, чтобы заставить это работать

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); 
} 
0 голосов
/ 05 декабря 2013

Мой подход с помощью jQuery.
Проверено в IE 6-8, Fx 1-25, Opera 7-14. Изящно ухудшается в 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.');
} 
});
...