在剪贴板中使用字节

时间:2014-08-05 18:07:03

标签: javascript byte bytearray clipboard

考虑以下情况:

有一个Web应用程序(问题主题)和第三方桌面应用程序。
桌面应用程序允许从/向其复制和粘贴内容。
剪贴板数据由文本(提供内容的后备片段)和XML格式的实际数据(包含比文本片段更多的信息)组成。
一切都会好的,但有一个问题: XML数据存储为字节数组而不是字符串

虽然将XML数据存储为字节数组的确切原因可能仍然是个谜,但是从Web应用程序处理XML数据仍然是一个好奇的主题。

首先,到剪贴板内容。虽然实际格式稍微复杂一点,但使用其他桌面应用程序的数据可以概括为:(a C# gist)

然后,我的尝试。到目前为止,我尝试使用JavaScript (jsfiddle)

var field = document.getElementById("field");
var log = document.getElementById("log");
//
field.oncopy = function(e) {
    var cd = e.clipboardData;
    if (cd == null) {
        log.value = "ClipboardData is not supported.";
        return;
    }
    e.preventDefault();
    var value = field.value;
    cd.setData("Text", "Text: " + value);
    cd.setData("Xml", "<value>" + value + "</value>");
}
//
field.onpaste = function(e) {
    var cd = e.clipboardData;
    if (cd == null) {
        log.value = "ClipboardData is not supported.";
        return;
    }
    log.value 
    = "Text: `" + cd.getData("Text") + "`\n"
    + "Xml: `" + cd.getData("Xml") + "`\n";
}

和Haxe + Flash (snippet)

import flash.Lib;
import flash.desktop.Clipboard;
import flash.desktop.ClipboardFormats;
class Test {
    static function main() {
        var stage = Lib.current.stage;
        stage.addEventListener("click", function(_) {
            var clip = Clipboard.generalClipboard;
            clip.clear();
            clip.setData(ClipboardFormats.TEXT_FORMAT, "(text)");
            clip.setData(cast "Xml", "(xml)");
            trace("Copied!");
        });
    }
}

到目前为止......无济于事。 JS无法读取桌面应用程序编写的XML数据,桌面应用程序无法读取JS或Flash编写的“XML”字段。

我很确定我做错了什么,但我无法发现问题。

任何帮助都将不胜感激。

0 个答案:

没有答案