当包含作为href的base64数据的HTML链接元素(<a/>)准备就绪时触发的事件
Is an event triggered when an HTML link element (<a/>) containing base64 data as href is ready?
我创建了一个网页,基本上可以并排显示两个图像。
它有一个"下载"按钮,可以触发一个普通的Javascript函数,该函数创建一个<canvas>
HTML元素,并将其中的两个图像连接起来。然后,它创建一个链接,将base64编码的结果图像作为href
,并点击它:
<a download="image.png" id="dllink" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAAMnCAYAAABhnf9DAAAgAElEQVR4nOzdR48kD3rn96j03pfv6qo21dVd3qT3JryP9Jll281..."></a>
以下是我使用的功能:
/***创建画布,在其中绘制两个图像,创建带有结果的链接*在"href"字段的base64中的图像,将链接附加到文档,*然后点击它*/函数saveImage(){//获取左侧图像var imgLeft=新图像();imgLeft.setAttribute('crossOrigin','anonys');imgLeft.src="imgLeft/"+idxImageShownLeft+".jpg";imgLeft.onload=函数(){//左图像准备好后,获取右图像var imgRight=新图像()imgRight.setAttribute('crossOrigin','anonys');imgRight.src="imgrid/"+idxImageShownRight+".jpg";imgRight.onload=函数(){//准备好正确的图像后,创建画布var canv=document.createElement("canvas");var widthLeft=parseInt(imgLeft.width);var widthRight=parseInt(imgRight.width);var width=widthLeft+widthRight;var height=imgLeft.height;canv.setAttribute("width",width);canv.setAttribute("height",高度);canv.setAttribute("id","myCanvas");canv.setAttribute('crossOrigin','anonys');var ctx=canv.getContext("2d");//在画布中绘制两个图像ctx.drawImage(imgLeft,0,0);ctx.drawImage(imgRight,widthLeft,0);//从画布中创建PNG图像var img=canv.toDataURL("image/png");//创建链接元素var aHref=document.createElement('a');aHref.href=img;aHref.setAttribute("id","dllink");aHref.download="image.png";//将链接附加到文档var renderDiv=document.getElementById("render");renderDiv.replaceChild(aHref,document.getElementById("dllink"));//单击链接aHref.click();}}}
我的问题是,这在Firefox上很好用,但在Chrome上不行。
经过一点研究,我意识到通过在Chrome中的aHref.click();
行之前设置断点,它可以很好地工作。我认为这意味着在<a href="data:image/png;base64,...></a>
准备好被点击之前,aHref.click();
被调用了,但我不确定。
- 我找不到这个主题的副本。我应该使用什么关键词才能100%确定
- 我的调查方向是否正确
- 是否有一个事件可以让我仅在准备就绪时调用
aHref.click();
您可以将它封装在一个init函数中,该函数在窗口完成加载时被调用。
function init() {
aHref.click();
}
window.onload = init;
它类似于普通的jQuery的.ready()方法。
aHref
、document.getElementById("dllink")
是否为同一元素?虽然.replaceChild
调用时"dllink"
尚未附加到document
?
尝试替代
renderDiv.appendChild(aHref);
对于
renderDiv.replaceChild(aHref, document.getElementById("dllink"));
相关文章:
- 当组件准备就绪时,如何在Polymer中动态注册新属性
- IIFE jquery已准备就绪
- 准备就绪时的随机背景
- Javascript/Css导航未显示在jquery文档上,仅在ie中准备就绪
- 在页面上加载高级jQuery版本准备就绪
- 修改 DOM 后如何确保 DOM 再次准备就绪
- 可以't将属性src设置为null,即使DOM已准备就绪
- 当文档准备就绪时,将数据从一个文本框复制到另一个
- 电话间隙设备准备就绪,5秒钟后未启动
- AngularJS文档准备就绪,无法正常工作
- 只有在文档内部的警报准备就绪后,触发器才能工作
- 确定对象何时准备就绪.我应该使用事件吗
- SVG正在等待文档在javascript中准备就绪
- 在 DOM 准备就绪之前附加类
- 如何检查提供程序以查看 HTTP 数据是否已准备就绪
- 科尔多瓦在从 3.3.0 更新到 3.6.4 后未启动设备准备就绪
- 当数据准备就绪时,React-Rails gem 调用组件
- angularJS:等待ng-if完成,以确保DOM准备就绪
- JQuery表分类器未捕获类型错误:对象#<HTML文档>没有方法'准备就绪'
- 当包含作为href的base64数据的HTML链接元素(<a/>)准备就绪时触发的事件