2017-02-20 96 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); 
}