考虑以下情况:
有一个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”字段。
我很确定我做错了什么,但我无法发现问题。
任何帮助都将不胜感激。