使用JavaScript重新创建Skype报价

使用JavaScript重新创建Skype报价,javascript,clipboard,skype,Javascript,Clipboard,Skype,我正在尝试用JavaScript重新创建(或“伪造”)Skype报价。因此,我需要将XML字符串推送到剪贴板,格式为“SkypeMessageFragment”。警报显示这很有效,但使用ClipView检查剪贴板时只显示一个字符(我假设您使用的是Windows,因为(据我所知)Skype quotes在其他操作系统上不起作用 首先,您的代码无法在Chromium中工作,因为它以一种名为的特殊类型序列化所有剪贴板数据,而Skype获取SkypeMessageFragment类型 让我们来看看Fi

我正在尝试用JavaScript重新创建(或“伪造”)Skype报价。因此,我需要将XML字符串推送到剪贴板,格式为“SkypeMessageFragment”。警报显示这很有效,但使用ClipView检查剪贴板时只显示一个字符(我假设您使用的是Windows,因为(据我所知)Skype quotes在其他操作系统上不起作用

首先,您的代码无法在Chromium中工作,因为它以一种名为的特殊类型序列化所有剪贴板数据,而Skype获取
SkypeMessageFragment
类型


让我们来看看Firefox的行为。我曾经检查过Firefox正在存储的数据,对于
text/plain
类型,一切都很好。但是对于
SkypeMessageFragment
类型,这就是我所拥有的:

从第一个字节中,我们可以推断编码是带有小Endian的UCS-2,这是一致的,因为JavaScript引擎在内部以UCS-2格式存储字符串。我们还可以看到最后一个字节是空字节


这就是为什么你只看到
谢谢你这么多的努力来解决这个问题!希望将来会有办法。@manniL:事实上,我也尝试过解决同样的问题,我想永远不会有解决办法。:(是的,很有可能。但没人知道未来会带来什么:D
document.addEventListener('copy', function(e) {
          var msg = $('#msg').val();
          var name = $('#name').val();
          var date = $('#date').val();
          var time = moment(date, 'MM/DD/YYYY h:mm a').valueOf();
          var skype = '<quote author="'+name+'" timestamp="'+time+'">'+msg+'</quote>';
          var locale = 1033;
          e.clipboardData.setData('text/plain', msg);
          e.clipboardData.setData('SkypeMessageFragment', skype);
          console.log('Copy');
          alert(e.clipboardData.getData('SkypeMessageFragment'));
          e.preventDefault();
});
function usc2_to_utf8(usc2_string) {
    utf8_string = "";

    for (var i = 0; i < usc2_string.length; i += 2) {
        var codePoint = 0;

        codePoint += usc2_string.codePointAt(i + 1);
        codePoint <<= 8;
        codePoint += usc2_string.codePointAt(i);

        utf8_string += String.fromCharCode(codePoint);
    }

    return utf8_string;
}