当前位置: 首页 > 知识库问答 >
问题:

包含base64数据as href的HTML链接元素()准备就绪时是否触发事件?

仲孙逸明
2023-03-14

我创建了一个基本上并排显示2个图像的网页。

它有一个下载按钮,触发一个香草Javascript函数,该函数创建一个

下面是我正在使用的函数的样子:

/** 
 * Create canvas, draw both images in it, create a link with the result
 * image in base64 in the "href" field, append the link to the document,
 * and click on it
 */
function saveImage() {

    // Get left image
    var imgLeft = new Image();
    imgLeft.setAttribute('crossOrigin', 'anonymous');
    imgLeft.src = "imgleft/" + idxImageShownLeft + ".jpg";
    imgLeft.onload = function() {

        // Once the left image is ready, get right image
        var imgRight = new Image()
        imgRight.setAttribute('crossOrigin', 'anonymous');
        imgRight.src = "imgright/" + idxImageShownRight + ".jpg";
        imgRight.onload = function() {

            // Once the right image is ready, create the canvas
            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", height);
            canv.setAttribute("id", "myCanvas");
            canv.setAttribute('crossOrigin', 'anonymous');
            var ctx = canv.getContext("2d");

            // Draw both images in canvas
            ctx.drawImage(imgLeft, 0, 0);
            ctx.drawImage(imgRight, widthLeft, 0);

            // Create PNG image out of the canvas
            var img = canv.toDataURL("image/png");

            // Create link element
            var aHref = document.createElement('a');
            aHref.href = img;
            aHref.setAttribute("id", "dllink");
            aHref.download = "image.png";

            // Append link to document
            var renderDiv = document.getElementById("render");
            renderDiv.replaceChild(aHref, document.getElementById("dllink"));

            // Click on link
            aHref.click();
        }
    }
}

我的问题是,这在Firefox上可以正常工作,但在Chrome上不行。

经过一点调查,我意识到通过在aHref之前设置一个断点。单击() 镀铬线条,效果很好。我认为这意味着aHref。单击()

  • 我找不到这个话题的副本。我应该使用什么关键词才能100%确定?
  • 我调查的方向对吗?
  • 是否有一个事件我可以依靠,以便调用aHref.click();只有当它准备好了?

共有2个答案

苏雅珺
2023-03-14

aHref文档。getElementById(“dllink”)是否显示为相同的元素?虽然“dllink”尚未在时附加到文档中。是否调用了replaceChild

试着代入

renderDiv.appendChild(aHref);

对于

renderDiv.replaceChild(aHref, document.getElementById("dllink"));

澹台蕴藉
2023-03-14

您可以将其包装在初始化函数中,当窗口完成加载时调用该函数。

function init() {
  aHref.click();
}
window.onload = init; 

它类似于jQuery的普通等价物。ready()方法。

 类似资料:
  • 问题内容: 我正在寻找一个DOM事件,该事件可以通过JavaScript进行监听,以了解通过打开选择元素(但未更改任何选项)然后通过关闭选择元素(在页面上其他位置)来关闭该元素。 这不是选择事件,因为选择保留了焦点。同样,这不是一些其他元素或文档或事件或窗口,文档或身体。 这不是选择事件,因为选择中的任何选项都没有更改。 我不关心旧版Internet Explorer,而只是在符合标准的现代浏览器

  • 我是测试新手,我正在使用codeception和phpunit来做一些TDD。 然而,我的方法有很多代码。我是否使用了最佳实践?有没有一种方法可以提高我的代码的就绪性,它能更干净吗?

  • 现在,我注意到具有,但是events列表中的最后一个事件将状态列为,因为准备状态探测失败。(在应用程序日志中,我可以看到,自那以后,有更多的请求传入准备状态探测,并且它们都成功了。) 我应该如何解释这些信息?Kubernetes认为我的豆荚准备好了,还是没有准备好?

  • 我无法创建某个docker容器,因为jenkins告诉我该名称已在使用中。 我已尝试查找或删除此容器,但无法执行以下操作: 容器是通过jenkins构建的,在不同的构建中,总是有相同的容器id在使用中被否认。我们有八个不同的jenkins节点,这项工作在其中七个节点上工作,创建和删除具有该名称的docker图像。 如何移除这个“幽灵”容器?Allready尝试了但没有成功:

  • 我遇到了一个问题: 获取健康检查以成功。尝试使用容器本机负载平衡(CNLB)时,在IIS容器中运行的Net app。 我有一个网络endpoint组(NEG),由GKE中的入口资源定义和VPC本机集群创建。 当我通过公开NodePort或制作LoadBalancer类型的服务来规避CNLB时,站点会毫无问题地解决。 所有的吊舱条件从一个描述看起来不错:吊舱准备就绪 运行时会显示网络endpoint

  • 本文向大家介绍C#判断指定驱动器是否已经准备就绪的方法,包括了C#判断指定驱动器是否已经准备就绪的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#判断指定驱动器是否已经准备就绪的方法。分享给大家供大家参考。具体如下: 希望本文所述对大家的C#程序设计有所帮助。