Добавить в браузер избранное/закладки из JavaScript, но для всех браузеров (мой не работает в Chrome)?
Может кто-нибудь помочь, я использую следующее для добавления закладки в IE и Firefox, но ее не работает в Chrome, и я не получаю сообщение об ошибке "msgstr" не поддерживается ".
Кто-нибудь знает хороший script для поддержки ВСЕХ браузеров или хотя бы для того, чтобы вернуться и сказать, что он не поддерживается, у меня есть доступ к jQuery - возможно, есть какой-то способ обнаружить браузер
В настоящее время я использую это, и он работает для IE и Firefox, но не хром
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');
}
Ответы
Ответ 1
Извините, но нет кросс-браузерного способа сделать это. Ваш пример FF также сломан: он не будет создавать обычную закладку, но откроется закладка, установленная на боковой панели. Вы должны использовать службу закладок для создания фактической закладки, но это не будет выполнено из-за ограничений безопасности.
Ответ 2
Я только что проверил этот script в:
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
- Opera 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
}
}();
Ответ 3
После открытия - как Эдисон! - куча способов это не работает, я в конце концов натолкнулся на эту страницу, в которой говорится, что добавление закладок через 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 version. 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.");
}
}
Надеюсь, что это полезно.
Ответ 4
Вы всегда можете предупредить клиента о нажатии ctr + D. Это универсально для всех браузеров. Он липкий, но так же полезен для клиента.
Ответ 5
Я не мог заставить приведенный выше пример работать. В любом случае, ответ на исходный вопрос "его не работает в CHROME, и я не получаю сообщение об ошибке" msgstr "не поддерживается".. из-за строки
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);
}
Ответ 6
Мой подход с помощью 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.');
}
});