Это возможно ... на надежных сайтах.
Видишь, буфер обмена IEData is pretty well defined. Он поддерживает только текст или URL-адрес. Ни WScript, ни ActiveXObject не обеспечивают лучший доступ к буферу.
Но вы можете использовать PowerShell для доступа .Net, в том числе Clipboard
, который имеет приятный маленький метод GetImage()
. Вызов PowerShell прост через WSH, равно как Base64 encoding.
В результате возникает проблема с извлечением извлеченных данных.
Обычно вы должны use a file, так как мы уже используем ActiveX. Но для демонстрации здесь я буду использовать реестр. Это избавляет нас от необходимости создавать FileSystemObject
и обнаруживать временную папку.
html ниже возьмет любое изображение в буфере обмена, в base64, и положит его в <img>
.
<!DOCTYPE html><meta charset="utf-8"><img width=500 /><script>
try {
var doc = document, body = doc.body, shell = new ActiveXObject('WScript.shell');
var key = 'HKEY_CURRENT_USER\\Software\\Microsoft\\Internet Explorer';
var cmd = "function Get-ClipImg {Add-Type -AssemblyName 'System.Windows.Forms';"+
"$s=New-Object System.IO.MemoryStream;"+
"[System.Windows.Forms.Clipboard]::GetImage().Save($s,[System.Drawing.Imaging.ImageFormat]::Png);"+
"[Microsoft.Win32.Registry]::SetValue('"+key+"','tmp_clipboard',[System.Convert]::ToBase64String($s.ToArray()))"+
"} Get-ClipImg";
shell.run('powershell -Command "'+cmd+'"', 0, true);
var data = shell.RegRead(key + '\\tmp_clipboard');
shell.RegDelete(key + '\\tmp_clipboard');
if (! data.trim()) body.textContent = 'Clipboard has no image';
else doc.querySelector('img').src = 'data:image/png;base64,' + data;
} catch (err) { body.textContent = err; }
</script>
Итак, вот вы, способ сделать изображение буфера обмена в IE без использования Flash или Java. Пока сайт доверен. (Локальный файл включен)
Или вы можете use Flash or Java.
Кстати, вы должны действительно предпочитают URL.createObject() над FileReader (), если вам нужен конечный результат URL; это намного быстрее, намного проще (без обратных вызовов) и обрабатывает более крупные файлы, чем FileReader(). – dandavis
Я не знаю, очень хорошо. вы могли бы предоставить некоторый пример кода. –