«Добавить в избранное» с помощью JavaScript в Opera [дубликат]

StackOverflow https://stackoverflow.com/questions/374487

  •  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 в настоящее время поддерживают добавление закладок, не инициируемое пользователем, но я не удивлюсь, если они удалят его и в будущей версии.

Я считаю, что попытка заставить посетителя веб-сайта добавить избранное/закладку считается дурным тоном и немного грубым, не нажимая на ссылку и не предпринимая явных действий, которые могли бы это сделать.Простое посещение веб-сайта не является достаточным основанием для того, чтобы попытаться заставить посетителей добавить на него избранное или закладку.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top