27 Stimmen

Zu den Browser-Favoriten/Lesezeichen von JavaScript hinzufügen, aber für alle Browser (meins funktioniert nicht in Chrome)?

Kann jemand helfen, ich bin mit den folgenden für das Hinzufügen eines Lesezeichens zu IE und Firefox, aber es funktioniert nicht in Chrome und ich bekomme nicht meine Fehlermeldung sagen "nicht unterstützt" entweder.

Kennt jemand ein gutes Skript, das ALLE Browser unterstützt oder zumindest zurückkommt und mir sagt, dass es nicht unterstützt wird, ich habe Zugang zu jQuery - vielleicht gibt es eine Möglichkeit, den Browser zu erkennen

Ich benutze dies derzeit und es funktioniert für IE und Firefox, aber nicht für 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');
}

0 Stimmen

Wollen Sie damit sagen, dass Sie versuchen, den Browser des Benutzers zu zwingen, ein Lesezeichen hinzuzufügen? Während ein Firefox- oder IE-Add-on das tun könnte, was Sie vorschlagen, hätte ein normales Skript auf einer Seite ganz sicher keinen Zugriff darauf.

0 Stimmen

Eigentlich ist die IE-Methode weit verbreitet (oft auf der Schaltfläche "Zu Favoriten hinzufügen"), es öffnet sich das Hinzufügen Dialog. Das ist eine schlechte Praxis, aber sie wurde sehr populär, als Internet-Anfänger (=> mit IE) nicht wussten, dass sie es selbst tun können.

3 Stimmen

Ja, das ist eine dumme Idee (wie "Zurück"-Links auf Seiten). Aber die Kunden sehen das oft auf anderen Websites und wollen es.

13voto

Christoph Punkte 157217

Leider gibt es keine Möglichkeit, dies browserübergreifend zu tun. Auch Ihr FF-Beispiel ist fehlerhaft: Es wird kein normales Lesezeichen erstellt, sondern ein Lesezeichen, das in der Seitenleiste geöffnet werden soll. Du müsstest also den Lesezeichen-Service nutzen um ein tatsächliches Lesezeichen zu erstellen, aber das wird aufgrund von Sicherheitseinschränkungen scheitern.

6voto

RET Punkte 9050

Nach der Entdeckung - wie Edison! - eine Reihe von Möglichkeiten, wie dies nicht funktioniert, stieß ich schließlich auf diese Seite die besagt, dass das Hinzufügen von Lesezeichen über JS in Chrome ausdrücklich deaktiviert ist. Leider wird nicht erklärt, warum.

Update: Ich wurde von einem anderen SO-Nutzer gebeten, diese Antwort zu erweitern...

Meine Links und Schaltflächen für diese Funktion haben alle ein class="addbookmark" die mit ihnen verbunden sind. Wenn der Benutzer-Agent Chrome ist, verwende ich etwas jQuery, um die Links zu deaktivieren und zu erklären, warum:

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

Und dann an anderer Stelle auf der Seite:

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

... was keineswegs perfekt ist, aber es scheint, dass die Möglichkeiten ziemlich begrenzt sind.

Die Version von jQuery ist nicht wichtig, und es liegt an Ihnen, ob Sie eine lokale Kopie oder einen Hot-Link zur Google-Version . bookmark.js ist ziemlich genau wie der Code des Auftraggebers:

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

Ich hoffe, das ist nützlich.

5voto

Arlo Carreon Punkte 49

Sie können den Kunden jederzeit auffordern, Strg+D zu drücken. Dies ist in allen Browsern möglich. Es ist geschmacklos, aber für den Kunden genauso nützlich.

CTRL + D -- für Windows
CMD + D - für Mac

5voto

FFish Punkte 10974

Ich habe dieses Skript gerade getestet:

Gewinnen Sie

  • IE 6.0, IE 7.0, IE 8.0
  • Firefox 2.0, Firefox 3.6.3
  • Safari 3.1.2, Safari 3.2.3
  • Oper 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
        }
    }();

3voto

Tony K Punkte 21

Ich konnte das obige Beispiel nicht zum Laufen bringen. Wie auch immer, die Antwort auf die ursprüngliche Frage 'es funktioniert nicht in CHROME und ich bekomme auch keine Fehlermeldung, die besagt, dass "nicht unterstützt" ' liegt an der Zeile

else if (window.external) { // IE 

Chrome besteht diesen Test und versagt dann beim Hinzufügen eines Lesezeichens. Ich änderte diese Zeile in

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

und jetzt erhalten Sie die Meldung "nicht unterstützt". Ich habe diese Meldung tatsächlich entfernt und die Funktion hotKeys() aufgerufen, um eine aussagekräftigere Meldung zu erhalten. Ich musste ein paar Änderungen vornehmen, damit das funktioniert

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X