0

我有一个如下编写的 javascript 函数,它在Firefox中可以很好地下载给定的 txt 内容。

  self.downloadURL = function (url) {
        var iframe;
        iframe = document.getElementById("hiddenDownloader");        
        if (iframe === null) {
            iframe = document.createElement('iframe');
            iframe.id = "hiddenDownloader";
            iframe.style.display = "none";
            document.body.appendChild(iframe);
        }
        iframe.src = url;
    }

但由于某些原因,它不能在IE 9上正常工作。所以我尝试转换为等效的 jquery,因为 jquery 与所有浏览器兼容。

这是相同功能的 jquery 等效项:

   self.downloadURL = function (url) {
        var iframe;
        iframe = $("#hiddenDownloader");        
        if (iframe === null) {
            iframe = $('<iframe></iframe>');
            iframe.id = "hiddenDownloader";            
            $("#hiddenDownloader").css("display", "none");
            $(document.body).append(iframe);
        }
        iframe.src = url;
    }

但是现在它在两个浏览器中都不起作用。请帮助让我知道我做错了什么。

4

6 回答 6

9

你的问题在于:

iframe = $('<iframe></iframe>');
iframe.id = "hiddenDownloader";       

iframe指的是 jQuery 对象而不是 DOM 节点。您将不得不使用.prop来设置 id:

iframe = $('<iframe></iframe>');
iframe.prop('id', "hiddenDownloader");       

你也有同样的问题:

if (iframe === null) {

您需要检查以下长度的地方iframe

if (iframe.length === 0) {

再一次,iframe.src = url;也许你可以弄清楚这一点:

iframe.attr('src', url);

但是你为什么要将原生 JavaScript 转换为 jQuery?

于 2013-09-05T12:39:55.623 回答
0

下载文件似乎是一种奇怪的方式。

无论如何,这可能与原来的工作方式相同:

if (!iframe.get(0)) {
  ...
}

...以及id另一张海报提到的财产。

于 2013-09-05T12:39:46.287 回答
0

尝试:

iframe = $("#hiddenDownloader")[0];
于 2013-09-05T12:40:20.937 回答
0
  • 替换iframe.src = url;iframe.attr("src",url + "?"+ Math.random()); 以防止 IE9 中的缓存问题
  • 替换iframe.id = "hiddenDownloader";iframe.attr("id","hiddenDownloader");
  • 替换if (iframe === null) {if (iframe.length === 0) {
于 2013-09-05T12:40:38.910 回答
0
iframe = document.getElementById("hiddenDownloader");          
iframe = $("#hiddenDownloader");        

这些行是不等价的。第二个创建一个 jQuery 对象,所以对 null 的检查永远不会等同于 true

于 2013-09-05T12:42:12.823 回答
0

这个链接可以帮助你:

http://www.sitepoint.com/forums/showthread.php?743000-IE9-Iframes-DOCTYPES-and-You

或者您可以将其添加到顶部:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
于 2013-09-05T13:06:11.377 回答