javascript - Mobile 上的 Safari 阻止 window.open

标签 javascript jquery html css canvas

<分区>


想改进这个问题吗? 通过 editing this post 添加细节并澄清问题.

关闭 7 年前

我有一个移动页面,用户可以在其中使用文本区域创建自己的智能手机背景。我使用 html2canvas 将文本区域转换为 Canvas ,并使用 windwow.open + canvas.toDataURL 在新选项卡中打开 PNG 供用户保存。 它适用于 Chrome,但据我所知,Safari 不允许我使用 window.open。 有没有其他方法可以让用户下载 PNG?我在想也许可以使用将文本区域转换为链接到一个空的 html 文件并将 Canvas 附加到该空的 html 文件的按钮?但我不确定那会如何运作。

非常感谢您!

这是我现在的 JS:

$(function() { 
$("#buttononelandscape").click(function() { 
    html2canvas($("#testlandscape"), {


        onrendered: function(canvas) {
            theCanvas = canvas;

            window.open(canvas.toDataURL("image/png"));


        }

    });
});

});

最佳答案

在我看来,您是在间接调用 window.open,而不是在对用户事件的直接响应中调用。大多数浏览器会阻止这些调用(我很惊讶 Chrome 不会,但我对 Canvas 渲染知之甚少)。

您可能必须将您的逻辑分解为两个按钮:一个生成 data: URI,然后另一个将它作为一个新窗口打开,这样您可以执行 window.open 以直接响应用户点击。

如果我这样做,它适用于 iPhone 5 上的 Safari:

<input type="button" value="Click Me">

document.querySelector("input").onclick = function() {
    var uri = "data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7";
    window.open(uri);
};

关于javascript - Mobile 上的 Safari 阻止 window.open,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30871799/

上一篇:html - 无法对齐 html 元素

下一篇:javascript - 自动滚动大水平图像

相关文章:

javascript - 如何使用css和js制作被动波浪效果按钮

对象内的javascript空数组

javascript - WebGL 着色器根据鼠标位置为纹理着色

javascript - 滚动到放置在其自己的 DIV 中的 jQuery Accordion 控件中的打开选项卡

jquery选中复选框IE问题

Javascript 下载在 Firefox 和 IE 中不起作用

javascript - 当我使用 javascript 的 document.write 命令时,它似乎不显示前导空格。请帮助

javascript - 我怎样才能有一个搜索框,人们可以在其中搜索我网站中的页面?

javascript - 在此上下文中元素 div 不允许作为元素 h5 的子元素

javascript - 当搜索词发生变化时,AJAX 自动完成列表无法更新?