如何在没有浏览器嗅探的情况下检测对iframe onload的支持?

时间:2016-03-29 12:04:00

标签: javascript asp.net iframe

我有一个网站,用户可以下载格式化的PDF文档或Excel文件记录。为了在没有回发的情况下执行此操作,我以编程方式创建iframe并将源设置为包含id和用于标识所需数据的键的URL。将显示一个微调器以指示正在进行下载。一旦ASP.NET处理程序处理了数据并且iframe收到了结果,onload事件就“假定”隐藏了微调器。

showSpinner();
var i = document.createElement("iframe");
var id = 2;
var key = '1234567890abcd';
var fileType = 'pdf';
i.src = 'Download.ashx?Type=' + fileType + '&ID=' + id + '&Key=' + key;
$(i).on("load", function () { hideSpinner(); })
i.style.display = "none";
document.body.appendChild(i);

我还尝试通过使用

将ifload标记直接嵌入到iframe标记中来添加不带jQuery或addEventListener的onload事件
i.setAttribute("onload", "hideSpinner();");

这两种方法在Firefox和Chrome中运行良好,但在任何一种情况下,IE和Edge都不会触发onload事件。我搜索过,发现很多人都沿着类似的方向报告问题。尽管尝试了几个建议,但IE似乎并不喜欢这种事情。

由于jQuery已弃用浏览器检测并且不赞成使用UserAgent嗅探,是否有更“可接受”的方法可以使用功能检测来禁用微调器,而不使用

if (/trident/i.test(navigator.userAgent)) hideSpinner();

或者,老实说,最好有任何关于如何解决iframe问题的建议,我们将非常感激。

0 个答案:

没有答案