[英]Add to browser favorites/bookmarks from JavaScript but for all browsers (mine doesn't work in Chrome)?
Can anyone help, I am using the following for adding a bookmark to IE and Firefox but its not working in Chrome and I don't get my error msg saying "not supported" either..任何人都可以帮忙,我正在使用以下内容向 IE 和 Firefox 添加书签,但它在 Chrome 中不起作用,我也没有收到错误消息说“不支持”..
Anybody know of a good script to support ALL browsers or at least to come back and tell me its not supported, I have access to jQuery - maybe there is some way to detect the browser任何人都知道支持所有浏览器的好脚本,或者至少回来告诉我它不受支持,我可以访问 jQuery - 也许有某种方法可以检测浏览器
I am currently using this and it works for IE and Firefox but not chrome我目前正在使用它,它适用于 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');
}
Sorry, but there's no cross-browser way to do this.对不起,但没有跨浏览器的方式来做到这一点。 Your FF example is broken as well: It won't create a regular bookmark, but a bookmark set to be opened in the sidebar.
您的 FF 示例也已损坏:它不会创建常规书签,而是设置要在侧边栏中打开的书签。 You'd have to use the bookmark-service to create an actual bookmark, but this'll fail due to security restrictions.
您必须使用书签服务来创建实际的书签,但由于安全限制,这将失败。
After discovering - like Edison!发现后——喜欢爱迪生! - a bunch of ways this doesn't work, I eventually came across this page that says adding bookmarks via JS is explicitly disabled in Chrome.
- 很多方法都行不通,我最终发现这个页面说在 Chrome 中明确禁用了通过 JS 添加书签。 Unfortunately it does not explain why.
不幸的是,它没有解释原因。
Update: I was asked to expand this answer by another SO user...更新:我被另一个 SO 用户要求扩展这个答案......
My links and buttons for this function all have a class="addbookmark"
associated with them.我用于此功能的链接和按钮都有一个与之关联的
class="addbookmark"
。 When the user agent is Chrome, I use some jQuery to disable the links and explain why:当用户代理是 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>
And then elsewhere on the 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>
... which is by no means perfect, but it seems one's options are fairly limited. ...这绝不是完美的,但似乎一个人的选择相当有限。
The version of jQuery isn't important, and it's up to you whether you want a local copy or hot-link to the google version . jQuery的版本并不重要,您是否想要本地副本或热链接到google 版本取决于您。
bookmark.js
is pretty much exactly as per the OP's code: 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.");
}
}
Hope that's useful.希望这是有用的。
I just tested this script in:我刚刚测试了这个脚本:
Win赢
Mac苹果电脑
Google Chrome 8.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 } }();
You can always alert the client to press ctr+D.您可以随时提醒客户端按 ctr+D。 This is universal across all browsers.
这是所有浏览器通用的。 It's tacky, but just as useful to the client.
它很俗气,但对客户同样有用。
CTRL + D -- for Windows CTRL + D -- Windows
CMD + D -- for Mac CMD + D -- 对于 Mac
I couldnt get the above example to work.我无法让上面的例子工作。 Anyway the answer to the original question 'its not working in CHROME and i don't get my error msg saying "not supported" either..' is due to the line
无论如何,原始问题的答案“它在 CHROME 中不起作用,我也没有收到说“不支持”的错误消息......”是由于该行
else if (window.external) { // IE
chrome actually passes this test and then obiously fails to add a bookmark. chrome 实际上通过了这个测试,然后显然无法添加书签。 I changed this line to
我将此行更改为
else if(window.external && !window.chrome) // IE
and now you get the 'not supported' message.现在您收到“不支持”消息。 I actually removed this message and called the function hotKeys() to get a more meaningful alert.
我实际上删除了此消息并调用了函数 hotKeys() 以获得更有意义的警报。 I had to make a few changes to get that to work
我必须做一些改变才能让它发挥作用
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);
}
My approach with help of jQuery.我在 jQuery 的帮助下的方法。
Tested in IE 6-8, Fx 1-25, Opera 7-14.在 IE 6-8、Fx 1-25、Opera 7-14 中测试。 Degrades gracefully in Chrome, Saf.
在 Chrome、Saf 中优雅地降级。
CSS: CSS:
.no-js .link-bookmark {
display: none;
}
JS: 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.