«Добавить в избранное» с помощью JavaScript в Opera [дубликат]
-
22-08-2019 - |
Вопрос
На этот вопрос уже есть ответ здесь:
Как заставить это работать в Опере?Я нашел этот фрагмент кода для Opera, но у меня он не работает:
function AddToFavorites(title, url) {
if (window.sidebar) { // Mozilla Firefox Bookmark
window.sidebar.addPanel(title, url,"");
return false;
}
else if( window.external ) { // IE Favorite
window.external.AddFavorite( url, title);
return false;
}
else if(window.opera && window.print) { // Opera Hotlist
var elem = document.createElement('a');
elem.setAttribute('href',url);
elem.setAttribute('title',title);
elem.setAttribute('rel','sidebar');
elem.click();
return false;
}
}
Консоль ошибок Dragonfly молчит, ошибок не возникает.
Решение
Если вы настаиваете на этом, то делайте это без динамически генерируемых избыточных ссылок:
<a href="http://real.url.example.com" title="Bookmark me, pleaeease!"
rel="sidebar"
onclick="return !addToFav(this.href,this.title)">
но, пожалуйста, просто не делай этого.
Как пользователь Opera, я буду благодарен за то, что не стал подталкивать эту моду – я могу легко перетащить вкладку на панель закладок/панель/быстрый набор, если захочу.
Другие советы
Opera применяет те же требования к пользовательским событиям чтобы разрешить создание закладок, поэтому код, который у вас есть, не будет работать, поскольку пользователь никогда не нажимал на только что созданную ссылку.
Вам нужно что-то еще вроде этого:
function AddToFavorites(obj, title, url){
if(window.sidebar){
// Mozilla Firefox Bookmark
window.sidebar.addPanel(title, url,"");
return false;
} else if(window.external){
// IE Favorite
window.external.AddFavorite( url, title);
return false;
} else if(window.opera && window.print){
//Opera Hotlist
obj.setAttribute('href',url);
obj.setAttribute('title',title);
obj.setAttribute('rel','sidebar');
obj.click();
return false;
}
}
Позвонить с
<a href="#" onclick="AddToFavorites(this, 'your title', 'your url');">Bookmark This Page</a>
(не стесняйтесь делать более ненавязчиво, я просто хотел указать требование к пользовательскому событию)
Чтобы ссылка «Добавить в избранное» работала в Opera 10, необходимо динамически добавлять отн. атрибут ссылки
$('#add_to_favs').attr('rel','sidebar');
Следующий код работает в Opera 8.54.Он не работает в 9.27 и 9.63 (единственные две другие версии, которые мне доступны для тестирования).В версиях 9.27 и 9.63 вы просто переходите на Yahoo!:
var url = 'http://www.yahoo.com/';
var title = 'Yahoo!';
var elem = document.createElement('a');
elem.setAttribute('href', url);
elem.setAttribute('title', title);
elem.setAttribute('rel', 'sidebar');
elem.click();
я подозревать что они удалили возможность добавлять закладки/избранное без инициативы пользователя.Поскольку вы уже можете заставить браузер перейти на новый URL-адрес, используя window.location
это, вероятно, не считается DoS-уязвимостью.
Следующее работает нормально, если пользователь нажимает ссылку:
var url = 'http://www.yahoo.com/';
var title = 'Yahoo!';
var elem = document.createElement('a');
elem.setAttribute('href', url);
elem.setAttribute('title', title);
elem.setAttribute('rel', 'sidebar');
elem.appendChild(document.createTextNode('Add Bookmark'));
document.getElementsByTagName('body')[0].appendChild(elem);
Кроме того, window.external.AddFavorite(url, title);
больше не разрешается добавление избранного, не инициированное пользователем, в Internet Explorer 8 Beta 2.Однако, если вы включите его в качестве onclick
событие ссылки, оно работает нормально:
<a href="http://www.yahoo.com/" title="Yahoo!" onclick="window.external.AddFavorite(this.href, this.title);return false;">Add to Favorites</a>
И Firefox 2.0.0.18, и 3.0.4 в настоящее время поддерживают добавление закладок, не инициируемое пользователем, но я не удивлюсь, если они удалят его и в будущей версии.
Я считаю, что попытка заставить посетителя веб-сайта добавить избранное/закладку считается дурным тоном и немного грубым, не нажимая на ссылку и не предпринимая явных действий, которые могли бы это сделать.Простое посещение веб-сайта не является достаточным основанием для того, чтобы попытаться заставить посетителей добавить на него избранное или закладку.