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

如何在ASP.NET上复制到客户端剪贴板按钮单击

东方文林
2023-03-14

由于目前在一个项目中使用ASP.NET4.7webforms,我正在尝试将在后端生成的数据复制到用户的客户端计算机。

换句话说,当用户提交表单时,在后端生成的代码需要复制到用户剪贴板。

这是我的尝试。

application.aspx.cs

.
.
.
   protected void Submit(object sender, EventArgs e)
    {
        try
        {
            ClientScript.RegisterStartupScript(GetType(), "hwa", "copyToClipboard("+encodedValue+");", true);
        }
        catch (Exception ex)
        {
        
        }
    }

application.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Application.aspx.cs" Inherits="azureCopyToClipboard.Application" %>

<!DOCTYPE html>
<form id="form1" runat="server">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>

        <div>
             <asp:Button ID="SubmitButton" runat="server" class="btn btn-primary  " OnClick="Submit" Text="Submit" />
        </div>
 
</body>

</html>


<script type="text/javascript">

    function copyToClipboard(textToCopy) {
        var textArea;

        function isOS() {
            //can use a better detection logic here
            return navigator.userAgent.match(/ipad|iphone/i);
        }

        function createTextArea(text) {
            textArea = document.createElement('textArea');
            textArea.readOnly = true;
            textArea.contentEditable = true;
            textArea.value = text;
            document.body.appendChild(textArea);
        }

        function selectText() {
            var range, selection;

            if (isOS()) {
                range = document.createRange();
                range.selectNodeContents(textArea);
                selection = window.getSelection();
                selection.removeAllRanges();
                selection.addRange(range);
                textArea.setSelectionRange(0, 999999);
            } else {
                textArea.select();
            }
        }

        function copyTo() {
            document.execCommand('copy');
            document.body.removeChild(textArea);
        }

        createTextArea(textToCopy);
        selectText();
        copyTo();
    }

</script>

</form>

im使用ClientScript.RegisterStartupScript调用客户端函数将编码值粘贴到用户剪贴板...但是由于现代浏览器安全原因,此尝试无效,我也没有得到任何客户端错误附加到此问题。

我试图使这个解决方案同时支持移动和非移动。

共有1个答案

蓬思博
2023-03-14

不幸的是,大多数浏览器不会允许您在没有适当的用户操作的情况下写入剪贴板,例如在按钮单击事件中。否则,它可能被用于恶意目的;任何网站都可以把他们想要的东西写进你的剪贴板,只需访问网站即可。在您的情况下,由于您进行了异步HTTP操作,您的按钮单击会丢失它自己的事件上下文,并且在服务器响应的成功回调函数中,您不再具有写入剪贴板的权限。

我想建议的是,大多数网站正在做的是;在一个漂亮的大模式窗口中显示结果代码,带有一个漂亮的“复制到剪贴板”按钮。

 类似资料:
  • 如何将div中的文本复制到剪贴板?我有一个div,需要添加一个链接,将文本添加到剪贴板。有解决办法吗? 单击“复制文本”后,然后按CtrlV,必须粘贴该文本。

  • 问题内容: 如何将div中的文本复制到剪贴板?我有一个div,需要添加一个链接,该链接会将文本添加到剪贴板。有解决方案吗? 单击复制文本后,然后按+ ,必须将其粘贴。 问题答案: 编辑 自2016年起,您现在可以在大多数浏览器中将文本复制到剪贴板,因为大多数浏览器都可以通过编程方式将选择的文本复制到剪贴板,从而可以将所选内容关闭。 与浏览器中的某些其他操作(如打开新窗口)一样,只能通过特定的用户操

  • 如何将div中的文本复制到剪贴板?我有一个div和需要添加一个链接,这将添加文本到剪贴板。对此有解决方案吗? 单击“复制文本”后,按下Ctrl+V,必须将其粘贴。

  • 问题是,从vim到剪贴板的复制/粘贴停止工作。我不知道为什么。。。 在中,我也没有看到和缓冲区... 这是我的。vimrc,如果需要的话。 有什么建议吗? 谢谢

  • 问题内容: 如何将BufferedImage存储到系统剪贴板中? 问题答案: 这是从这里获得的工作代码,已成功测试

  • 将一个字符串复制到剪贴板。 仅作为用户操作的结果(即,在 click 事件侦听器中)。 创建一个新的 <textarea> 元素,用提供的数据填充它,并将其添加到 HTML 文档中。 使用 Selection.getRangeAt() 来存储选择的范围(如果有的话)。 使用 document.execCommand('copy') 复制到剪贴板。 从HTML文档中删除 <textarea> 元素。