点击跨度下载html文件

时间:2015-01-22 10:52:06

标签: javascript html5 amazon-s3

我想点击一个跨度来下载HTML文件。

我在这里没有使用任何锚标签。我想通过简单点击一个跨度来做到这一点。

Url的扩展名为.html。并且html文件的url位于另一个域(Amazon s3)

如何在JavaScript中实现这一点,就像在锚标记中一样,我可以轻松地编写属性' download'在它。

4 个答案:

答案 0 :(得分:2)

这实际上是将页面的当前位置设置为data:text/attachment(在FF中)。在Chrome中,似乎设置位置不会触发文件下载。下面是我的命题,让你指定文件名以及你想要下载为html的网站部分(保留缩进)



function toBase64 (str) {
  return window.btoa(unescape(encodeURIComponent(str)));
}

function triggerDownload () {
  var html = 'data:text/attachment;base64,' + toBase64(document.querySelector('html').innerHTML);
  var evt = new MouseEvent('click', {
    view: window,
    bubbles: false,
    cancelable: true
  });

  var a = document.createElement('a');
  a.setAttribute('download', 'file.html');
  a.setAttribute('href', html);
  a.setAttribute('target', '_blank');

  a.dispatchEvent(evt);
}

document.querySelector('span').addEventListener('click', function () {
  triggerDownload();
});

span {
  color: green;  
  cursor: pointer;
}

<h1>Click <span>here</span> to download</h1>
&#13;
&#13;
&#13;

How to download the current page as a file / attachment using Javascript?您可以看到其他示例,其中也可以下载页面的确定部分等。(ps:该片段赢得了从stackoverflow添加的iframe中运行)

答案 1 :(得分:0)

感谢您的回答和评论。

我现在能够下载该文件,但是违反了问题的先决条件(即锚标记用法)

我跟着this。链接中的以下方法可以完成工作

function SaveToDisk(fileUrl, fileName) {
    var hyperlink = document.createElement('a');
    hyperlink.href = fileUrl;
    hyperlink.target = '_blank';
    hyperlink.download = fileName || fileUrl;

    var mouseEvent = new MouseEvent('click', {
        view: window,
        bubbles: true,
        cancelable: true
    });

    hyperlink.dispatchEvent(mouseEvent);
    (window.URL || window.webkitURL).revokeObjectURL(hyperlink.href);
}

但是我现在需要销毁下载链接后创建的锚标记。

答案 2 :(得分:0)

您正在尝试发出跨域请求。为此,您必须启用跨源资源共享(CORS)。幸运的是,S3支持CORS请求。您需要通过添加CORS配置来启用它。

请参阅How Do I Enable CORS on My Bucket?

上的AWS文章

在浏览器中使用AJAX下载文件

function download() {
$.ajax({
url: "https://s3.amazonaws.com/123d_test/yourHtmlFile.html",
type: "GET",
dataType: "text",
success: function (data, textStatus,jqXHR)
    { alert(data.toString()); console.log(data);},
error: function (data, textStatus, jqXHR)
    {alert("error"); console.log(textStatus);}
    });
    }

Source

答案 3 :(得分:-1)

如果您使用的是HTML5,则可以使用下载属性:

<a href="something.html" download="something.html">Download</a>