Кроссбраузерное добавление в закладки с редиректом

Рейтинг: 0Ответов: 2Опубликовано: 10.04.2011

Задача: 1) добавить сайт в закладки, 2)выполнить запрос в БД, 3) вернуть пользователя на главную страницу сайта.

Вот такой код есть на данный момент.

Еще до <html> выполняем запрос к БД, далее:

<body>

<script type="text/javascript">
// Добавить в Избранное
function add_favorite(a) {
    //title=document.title;
    title='заголовок';
    url='http://www.site.ru/';

    try {
        // Internet Explorer
        window.external.AddFavorite(url, title);
    }

    catch (e) {
        try {
            // Mozilla
            window.sidebar.addPanel(title, url, "");
        }
    catch (e) {
        // Opera
        if (typeof(opera)=="object") {
            a.rel="sidebar";
            a.title=title;
            a.url=url;
            return true;
        }
        else {
            // Unknown
            alert('Ваш браузер не поддерживает автоматическое добавление закладок. Нажмите Ctrl+D чтобы добавить страницу в закладки.');
        }
    }
    }

    location="http://www.site.ru";
    document.location.href="http://www.site.ru";
    location.replace("http://www.site.ru");
    window.location.reload("http://www.site.ru");
    document.location.replace("http://www.site.ru");

    return false;
}
</script>
 </body>

В результате в мозилле все срабатывает как надо. В остальных браузерах (IE, opera, chrome, safari) не работает. В JS не силен, поэтому прошу помощи.

Этот скрипт ничего не делает против воли пользователя. Пользователю задается стандартный запрос от браузера о добавлении в закладки. К тому же, чтобы этот скрипт запустить, пользователь сам кликает по ссылке "добавить в закладки". пс. прежде чем коментить разобрался бы.

Ответы

▲ 1

Ну вместо всего этого:

location="http://www.site.ru";
document.location.href="http://www.site.ru";
location.replace("http://www.site.ru");
window.location.reload("http://www.site.ru");
document.location.replace("http://www.site.ru");

Можно написать это:

top.parent.document.location = 'http://site.ru';

А поводу всего остального - добавьте alert(1); перед каждым добавлением в закладки и проверьте - какой браузер до куда доходит.

▲ 1
<script type="text/javascript">  
function add_favorite(a) {  
    var title = 'заголовок'; // или document.title  
    var url = 'http://www.site.ru/'; // или location.href

    if(window.external.AddFavorite)  
        window.external.AddFavorite(url, title);  
    else if(window.sidebar.addPanel)  
        window.sidebar.addPanel(title, url, "");  
    else if (typeof(opera)=="object") {  
        a = a || document.getElementsByTagName("body")[0];
    a.rel = "sidebar";  
        a.title = title;  
        a.url = url;  
        return true;  
    }  
    else  
        alert('Ваш браузер не поддерживает автоматическое добавление закладок. Нажмите Ctrl+D чтобы добавить страницу в закладки.');  
}  
location.href = "..."; // или location.replace("..."), чтобы не заносить текущую страницу в историю посещений  
</script>  
<a href="#">Добавить в закладки</a>

Полагаю, так будет работать. Также, можно location.href повесить на callback аяксового запроса к странице добавления в БД.