簡體   English   中英

從 JavaScript 添加到瀏覽器收藏夾/書簽但適用於所有瀏覽器(我的不適用於 Chrome)?

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

任何人都可以幫忙,我正在使用以下內容向 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');
}

對不起,但沒有跨瀏覽器的方式來做到這一點。 您的 FF 示例也已損壞:它不會創建常規書簽,而是設置要在側邊欄中打開的書簽。 您必須使用書簽服務來創建實際的書簽,但由於安全限制,這將失敗。

發現后——喜歡愛迪生! - 很多方法都行不通,我最終發現這個頁面說在 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 } }();

您可以隨時提醒客戶端按 ctr+D。 這是所有瀏覽器通用的。 它很俗氣,但對客戶同樣有用。

CTRL + D -- Windows
CMD + D -- 對於 Mac

我無法讓上面的例子工作。 無論如何,原始問題的答案“它在 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); 
} 

我在 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.');
} 
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM