Поведение автозагрузки и проблема с кнопкой возврата - PullRequest
1 голос
/ 04 апреля 2011

Вместо того, чтобы ссылаться непосредственно на файлы для загрузки на веб-сайте, мы ссылаемся на страницу с надписью «Спасибо за загрузку». На странице есть коды отслеживания, поэтому мы знаем, сколько людей скачали файл. Страница запускает файл загрузки с использованием показанного кода jQuery, который добавляет небольшую задержку после загрузки страницы до начала загрузки. Местоположение для загрузки имеет заголовок расположения контента, поэтому он всегда загружается правильно в браузере, оставляя видимой страницу «Спасибо за загрузку». Это все хорошо работает.

Проблема возникает, если пользователь продолжает просмотр этой страницы, а затем выполняет ответный удар. Загрузка запускается снова.

Использование window.location.replace(href);, похоже, не помогло.

Проблема еще более осложняется тем фактом, что CMS, доставляющая страницу, установила ее немедленное истечение, поэтому она не кэшируется.

Предложения по (i) способам избежать этой проблемы; (ii) есть ли лучшие способы обработки страниц загрузки файлов / страниц с благодарностями?

Код jQuery

$(document).ready(function () {
    $('a.autoDownload').each(function () {
        setTimeout('navigateToDownload("' + $(this).attr('href') + '")', 4000);
    });
});

function navigateToDownload(href) {
    document.location.href = href;
}

Ответы [ 2 ]

2 голосов
/ 04 апреля 2011

Один из возможных подходов - установить cookie через Javascript при первой загрузке страницы.Затем, если эта страница когда-либо загружается снова, вы можете проверить наличие файла cookie и, если он есть, не выполнять автоматическую загрузку?

Используя плагин Cookie для jQuery какпример:

$(document).ready(function () {
    $('a.autoDownload').each(function () {
        var hasDownloadedThisLink = $.cookie("site." + $(this).attr('id'));
        if (!hasDownloadedThisLink) {
            $.cookie("site." + $(this).attr('id'), "true");
            setTimeout('navigateToDownload("' + $(this).attr('href') + '")', 4000);
        }   
    });
});

Это всего лишь пример.Если вы пошли по этому пути, вам пришлось бы учитывать, сколько возможных ссылок на скачивание может быть, поскольку существует ограничение на количество файлов cookie, которые вы можете установить.Также обратите внимание, что я использовал атрибут id ссылок для идентификации их в файле cookie - я подумал, что это было бы более подходящим, чем использование какой-либо формы атрибута href.Я также добавил к имени файла cookie site..

1 голос
/ 04 апреля 2011

Ну, есть несколько решений для этого.Вот пример:

function navigateToDownload(href){
    var e = document.createElement("iframe");
    e.src=href;
    e.style.display='none';
    document.body.appendChild(e);
}

Могут существовать и другие реализации, но я сомневаюсь, что они менее "хакерские".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...