gpt4 book ai didi

javascript - 使用 JavaScript 重新创建 Skype 报价

转载 作者:行者123 更新时间:2023-11-29 10:39:03 32 4
gpt4 key购买 nike

我正在尝试使用 JavaScript 重新创建(或“伪造”)Skype 报价。因此,我需要将 XML 字符串推送到剪贴板,格式为“SkypeMessageFragment”。警报显示效果很好,但使用 ClipView 调查剪贴板仅显示一个字符 (<),尽管文本/纯文本内容是正确的。

原因可能是内容的类型,它应该是 MemoryStream(但这当然不可能用 JavaScript),解释了 here .

有没有人知道如何解决这个问题,或者当时不可能?

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();
});

最佳答案

我假设您使用的是 Windows,因为(据我所知)Skype 报价不适用于其他操作系统。

首先,您的代码将无法在 Chromium 中运行,因为它以名为 Chromium Web Custom MIME Data Format 的特殊类型序列化所有剪贴板数据。 ,而 Skype 获取 SkypeMessageFragment类型。


那么让我们看看 Firefox 的行为。我用过 Free Clipboard Viewer检查 Firefox 正在存储的数据,以及 text/plain输入一切都很好。但这就是我对 SkypeMessageFragment 的看法输入:

Hexadecimal view of the SkypeMessageFragment data

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

这就是为什么您只看到 < 的原因,因为下一个字节是空字节,所以您的软件可能认为该字符串已终止。

现在,如果我们对真实的 Skype 报价执行相同的操作,我们可以看到 Skype 使用的是 UTF-8,没有尾随空字节。所以它期望剪贴板中有一个 UTF-8 编码的字符串,这就是为什么你的引用没有按预期工作。


我们可以尝试使用那段代码强制使用 UTF-8 格式:

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;
}

该技巧将数据以 UTF-8 格式存储在剪贴板中:

Hexadecimal view of the SkypeMessageFragment data

但这还不够。引用出现在文本区域中,就好像它是由 Skype 制作的一样,但如果您发布它,Skype 将无法识别该引用。我想这与我未能删除的字符串末尾的 2/3 个空字节有关。

另外,请注意 Firefox might change how it handles custom clipboard types很快。


您可能想使用 Flash,但 Flash 也会失败,因为 it will prefix all the custom types .

我不知道 Java 小程序等其他扩展如何与剪贴板一起使用,但我的猜测是您不想强制用户安装任何东西,所以恐怕没有解决方案。

关于javascript - 使用 JavaScript 重新创建 Skype 报价,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32203443/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com