Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 单击span下载html文件_Javascript_Html_Amazon S3 - Fatal编程技术网

Javascript 单击span下载html文件

Javascript 单击span下载html文件,javascript,html,amazon-s3,Javascript,Html,Amazon S3,我想下载一个跨点击HTML文件 我没有在这里使用任何锚定标签。我想在一个跨度上简单的点击一下就可以做到这一点 Url具有.html扩展名。html文件的url位于另一个域(AmazonS3) 如何在JavaScript中实现这一点,就像在anchor tag中一样,如果我在其中写入属性“download”(下载),就很容易了。如果您使用的是HTML5,那么可以使用download属性: <a href="something.html" download="something.html"&g

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

我没有在这里使用任何锚定标签。我想在一个跨度上简单的点击一下就可以做到这一点

Url具有.html扩展名。html文件的url位于另一个域(AmazonS3)


如何在JavaScript中实现这一点,就像在anchor tag中一样,如果我在其中写入属性“download”(下载),就很容易了。

如果您使用的是HTML5,那么可以使用download属性:

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

这实际上是将页面的当前位置设置为
数据:文本/附件(FF)的问题。在Chrome中,设置位置似乎不会触发文件下载。下面是我的建议,让我们指定文件名,以及要下载为html的网站部分(保留缩进)

函数toBase64(str){
返回窗口.btoa(unescape(encodeURIComponent(str));
}
函数触发器下载(){
var html='data:text/attachment;base64'+toBase64(document.querySelector('html').innerHTML);
var evt=新建MouseEvent('单击'{
视图:窗口,
泡泡:错,
可取消:正确
});
var a=document.createElement('a');
a、 setAttribute('download','file.html');
a、 setAttribute('href',html);
a、 setAttribute('target','u blank');
a、 调度事件(evt);
}
document.querySelector('span')。addEventListener('click',function(){
触发器下载();
});
span{
颜色:绿色;
光标:指针;
}

单击此处下载
感谢您的回答和评论

我现在可以下载该文件,但是违反了问题的先决条件(即锚定标记的使用)

我跟着。下面链接中的方法可以完成此任务

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);
}

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

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

请参阅AWS关于

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

请将代码放在这里。jQuery可以吗?或者纯javaScriptJquery可以正常工作,但是我不想使用来自同一域或跨域的任何其他jquery插件?指向.html文件的url位于另一台机器上,即它保存在s3上。amazonI不想使用锚定标记使用此代码打开包含url的页面(在同一选项卡中),如以下数据:文本/附件;base64,AHR0CDOVL3BHEXRTCHVIBGLJLNMZLWWLXNVDXROZWFZDC0XLMFTYXPVBMF3CY5JB20VBWVYY2HHBNRFDG5JLZQVBWYY2HHBNRF8XLJIZXZE0MJE5MTK1MZK3MJFC2LNBMVKLMH0BWW=屏幕中仅显示文本形式的url HMM,这是真的。它在FF(37)上运行良好,但在Chrome(至少在Chrome 41中)上运行不好。我会检查它只是更新以下,但与抓住任何博客中提到的WebItemMethods有助于实现我的要求,这是伟大的可能性!另外,关于document.createElement和GC(出于好奇):(我想知道我们是否可以创建一堆HTMLElement来制造混乱)
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);}
    });
    }