2

我需要关于将图像复制到网站中的剪贴板的帮助。图像是动态创建的。

我找到了两个解决方案

解决方案 1:

using System.Windows.Forms;

Bitmap bitmapImage ;

protected void buttonClipboard_Click(object sender, System.Web.UI.ImageClickEventArgs e)
{
    MemoryStream memoryStream = new MemoryStream(imageByteArray);             // Image byte array is the input
    bitmapImage = (Bitmap)System.Drawing.Image.FromStream(memoryStream);
    memoryStream.Flush();
    memoryStream.Close();
    Thread cbThread = new Thread(new ThreadStart(CopyToClipboard));
    cbThread.ApartmentState = ApartmentState.STA;
    cbThread.Start();
    cbThread.Join();
}

[STAThread]
protected void CopyToClipboard()
{
    if (bitmapImage != null)
    {
        //Clipboard.SetData(DataFormats.Bitmap, bitmapImage);
        Clipboard.SetImage(bitmapImage);
    }
}

这在发布网站之前工作正常。发布后,这在任何网站浏览器中都不起作用,因为这里使用了 STAThread。一些网站表示,由于浏览器中的内部多线程处理,线程无法在已发布的网站中工作。

解决方案 2:

<script type="text/javascript">
        function CopyToClip() {
            var imgControl = document.getElementById('imageContent');
            imgControl.contentEditable = 'true';
            var controlRange;
            if (document.body.createControlRange) {
                controlRange = document.body.createControlRange();
                controlRange.addElement(imgControl);
                controlRange.execCommand('Copy');
            }
            imgControl.contentEditable = 'false';
            return true;
        }

在发布网站之前和之后,这个 java 脚本在 IE 上运行良好。但它在任何情况下都不适用于 Chrome 和 Mozilla。

我需要一种适用于 Mozilla 和 Chrome 的解决方案。

请为此提出任何解决方案?

4

2 回答 2

0

如果没有用户手动编辑至少一个配置文件,它在 Firefox 中实际上是行不通的。

在 chrome 中它被禁用,除了 extensions

如果您希望跨浏览器剪贴板支持可悲的是,Flash 小部件是目前唯一真正可行的方式。

于 2012-04-17T10:14:51.313 回答
0

IE 是唯一支持这种剪贴板交互方法的浏览器。没有其他浏览器支持在剪贴板中放置图像。

对于文本,您必须使用基于 Flash 的解决方案才能实现跨浏览器支持。你可以试试 ZeroClipboard

Mozilla 有一个剪贴板指南,但它的级别相当低,从这个文档来看,出于安全考虑,他们不太热衷于打开剪贴板。特别是关于“为网站启用剪贴板访问”:

Firefox 没有内置这样的功能。

然而,剪贴板交互有一个有趣的W3C API 规范。特别是,该setData方法似乎对您的用例很有希望。这个 SO 答案对事件进行了有趣的测试onpaste,但不幸的是,剪贴板上的项目没有任何内容,只是检索它们。

于 2012-04-17T10:23:29.790 回答