从 JavaScript 添加到浏览器收藏夹/书签但适用于所有浏览器(我的不适用于 Chrome)?

IT技术 javascript firefox google-chrome cross-browser bookmarks
2021-03-17 16:20:29

任何人都可以提供帮助,我正在使用以下内容向 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个回答

对不起,但没有跨浏览器的方式来做到这一点。您的 FF 示例也已损坏:它不会创建常规书签,而是设置要在侧边栏中打开的书签。您必须使用书签服务来创建实际的书签,但由于安全限制,这将失败。

如果这仅适用于消息灵通的客户,那么为什么要关心它是否适用于 Chrome 呢?
2021-04-19 16:20:29
这个答案已经过时了,请参阅 FFish 发布的脚本
2021-05-06 16:20:29
FF 情况略有改善:由于 UI 更改,现在可以在添加书签时将其标记为常规书签,但默认情况下它仍会在侧边栏中打开
2021-05-08 16:20:29
是的,我也是.. 认为这是一个愚蠢的想法,但客户想要它.. 但如果不可能,我想我会找到其他东西:-)
2021-05-10 16:20:29
@Stephan:我不同意 - 你是正确的,它现在可以在 FF 中使用(如果你忽略用户必须取消选中侧边栏框才能获得正确书签的事实,我已经评论过了),但在许多其他浏览器中,该脚本将只显示alert()告诉用户点击某个组合键;和以前一样,仍然没有真正的跨浏览器解决方案可用。
2021-05-15 16:20:29

发现后——喜欢爱迪生!- 很多方法都行不通,我最终发现这个页面说在 Chrome 中明确禁用了通过 JS 添加书签。不幸的是,它没有解释原因。

更新:我被另一个 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几乎完全按照 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."); 
    } 
} 

希望这是有用的。

我刚刚测试了这个脚本:

  • IE 6.0、IE 7.0、IE 8.0
  • 火狐 2.0、火狐 3.6.3
  • Safari 3.1.2、Safari 3.2.3
  • 歌剧 9.00
  • 谷歌浏览器 8.0

苹果电脑

  • 火狐 3.6.13
  • Safari 5.0.1
  • 歌剧 11.0
  • 谷歌浏览器 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
        }
    }();
    
在 IE9 中,我收到一个空警报。您还调用变量 ATBookmarkApp,但在链接 onclick 处理程序上返回 BookmarkApp。
2021-04-18 16:20:29
我编辑了上面的答案以实际调用正确的类,并删除了 GlamThumbs 标题(我刚才几乎忘记将其删除)。除此之外,像魅力一样工作!
2021-05-06 16:20:29
@Stephan:我不考虑显示一个消息框,告诉用户点击组合键“像魅力一样工作”......
2021-05-07 16:20:29
@FFish 这将不起作用,因为您指示 BookmarkApp.addBookmark(this) 的用法,但关于您的脚本,它必须是 ATBookmarkApp.addBookmark(this) 请编辑它。请问,“GlamThumbs - 免费色情视频画廊”的标题是什么。请使用其他东西:) 我差点忘了它没有改变,这对游客来说真的很糟糕。
2021-05-12 16:20:29

您可以随时提醒客户端按 ctr+D。这是所有浏览器通用的。它很俗气,但对客户同样有用。

CTRL + D -- 对于 Windows
CMD + D -- 对于 Mac

arlo:当您可以像往常一样(在 1910 年)“直接”启动汽车时,为什么要在汽车上添加启动按钮?
2021-04-20 16:20:29
实际上对于 9 之前的 Opera 版本:它是 CTRL + T,在 Konqueror 上:CTRL + B。您还可以指定它是“CTRL”还是“CMD/Command”,Win vs Mac。
2021-04-25 16:20:29

我无法让上面的例子工作。无论如何,原始问题的答案“它在 CHROME 中不起作用,我也没有收到说“不支持”的错误消息......”是由于该行

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