2017-02-20 2 views
0

Страница Я работаю над списком документов. Каждый документ является интерактивной ссылкой. Нажатие открывает PDF-файл (который обычно открывается на другой вкладке или даже в другом приложении в зависимости от настроек пользователя), а затем перезагружает исходную вкладку, чтобы обновить «непрочитанный» счет на странице и изменить стиль ссылки на укажите «читать».Открыть PDF-файл с края без открытия лишних пустых вкладок

HTML диапазон окружающих деталей документа:

<span class='btn-link' onclick='openReport(@orderNumber, @tableBodyId); return false;'> 

Javascript:

function openReport(orderNumber, tableBodyId) { 
    var url = "/Reports/ValuationReportDocPdf?orderNumber=" + orderNumber; 
    var win = window.open(url, ''); 
    setTimeout(function() { location.reload(); }, 3000); 
} 

Javascript работает как задумано в Chrome, Firefox и IE11.

В Edge, когда нажимается ссылка, открывается пустая вкладка и получает фокус, когда исходная вкладка мигает на панели вкладок, ожидая, когда я выберу «Сохранить», «Сохранить как» и «Отменить», , Таким образом, пользователь должен вернуться к исходной вкладке, чтобы продолжить. Для начала это довольно запутанный пользовательский интерфейс. Затем, если я нажму «Сохранить», это ухудшится: открывается третья вкладка, содержащая PDF-файл.

Вопрос

Как получить Гурт играть хорошо? Я хочу, чтобы фокус оставался на исходной странице, пока пользователь не выбрал, что делать с PDF-файлом, а затем откройте PDF, не открывая никаких пустых вкладок.

Редактировать

This post кажется связаны, но он использует <a>. Я не думаю, что могу использовать якорь, потому что мне нужно также обновить страницу.

ответ

2

Я нашел some help с этим. Для Edge only я динамически создаю <a> с атрибутом download и «нажмите» его.

function openReport(orderNumber, tableBodyId) { 
    var url = "/Reports/ValuationReportDocPdf?orderNumber=" + orderNumber; 

    if (isEDGE()) { 
     var dl = document.createElement('a'); 
     dl.setAttribute('href', url); 
     dl.setAttribute('download', 'filename.txt'); 
     dl.click(); 
    } else { 
     window.open(url, ''); 
    } 

    setTimeout(function() { location.reload(); }, 3000); 
} 

function isEDGE() { 
    return /Edge\/\d./i.test(navigator.userAgent); 
}