Мне действительно нужен способ скопировать некоторый текст в буфер обмена ОС в Firefox.Скопировать в буфер обмена с Javascript в Firefox
Знайте, что это легко в IE и невозможно в Chrome и Opera, если не используется вспышка. Из-за разных причин я не могу использовать флеш-решение!
Если он работает в прошлом, но теперь netscape.security.PrivilegeManager.enablePrivilege защищен, насколько я могу понять (начиная с версии 17).
Это выглядит так, как будто это все еще возможно в соответствии с этой статьей:
https://developer.mozilla.org/en-US/docs/Using_the_Clipboard
Believe по-прежнему необходимо, чтобы включить возможность в user.js файл как этот
user_pref("capability.policy.policynames", "allowclipboard");
user_pref("capability.policy.allowclipboard.sites", "http://");
user_pref("capability.policy.allowclipboard.Clipboard.cutcopy", "allAccess");
Но как мне это сделать? Проделали некоторые испытания без особого успеха и подумали, что в Интернете нет руководства, объясняющего, как это должно быть сделано в общем виде. Например. простое руководство о том, как включить доступ к javascript в буфер обмена. Надеюсь, это также руководство, которое может использовать новичок. Как сделать это и опубликовать его здесь, но сначала нужно рабочее решение.
В соответствии с сетью существует 2 решения для копирования в буфер обмена;
document.execCommand("copy", false, null)
и
var gClipboardHelper = Components.classes["@mozilla.org/widget/clipboardhelper;1"].getService(Components.interfaces.nsIClipboardHelper);
gClipboardHelper.copyString("Put me on the clipboard, please.");
Оба генерируют неудачу с первой попытки.
Для решения ниже требуется, чтобы пользователь нажал CTRL + C, и мне нужно решение, в котором текст должен копироваться на основе нажатия кнопки (многие на одной странице).
Мой старый решение было так:
var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard);
if(clip)
{
var trans = Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);
if(trans)
{
var str = new Object();
var len = new Object();
var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
if(str)
{
var clipid=Components.interfaces.nsIClipboard;
if(clipid)
{
str.data = cliptext;
trans.addDataFlavor('text/unicode');
trans.setTransferData("text/unicode", str, cliptext.length*2);
clip.setData(trans, null, clipid.kGlobalClipboard); // No return value
return 0;
}
}
}
}
Components.classes не определено в непривилегированной коде (не надстройку и т.д.), поэтому я не верю, что любое решение, с этим будет работать любой Больше. Один из вариантов - создать надстройку, которая будет выполняться в области привилегированных кодов и отправить текст, который должен быть скопирован в это дополнение, чтобы он обрабатывал копию в буфер обмена ОС (хороший новый возможный проект).
Это только оставить document.execCommand («copy», false, null) в поле в качестве самостоятельного решения.
Пробовал этот код, и он ничего не копирует в буфер обмена ОС - но не генерирует никаких ошибок кстати.
var pre = document.getElementById('pcryptcopytext');
if(!pre)
{
pre = document.createElement("pre");
pre.setAttribute('id', 'pcryptcopytext');
pre.setAttribute('style', 'opacity: 0; position: absolute; top: -10000px; right: 0;');
document.body.appendChild(pre);
}
pre.innerHTML = cliptext;
pre.contentEditable = true;
//pre.unselectable = "off";
//pre.focus();
if (document.createRange)
{
var rng = document.createRange();
rng.selectNodeContents(pre);
document.execCommand("copy", false, null);
document.body.removeChild(pre);
}
Итак, у любого есть рабочее решение?
Надстройка может быть установлена в Firefox с Mozilla.org, перейдя сюда: https://addons.mozilla.org/en-US/firefox/addon/ffclipboard/ Это не требует перезагрузки. Решения на основе флеш-памяти, такие как zeroclipboard, требуют от пользователя щелчка по скрытому флеш-ролику, поэтому, если у вас есть сложное требование пользовательского интерфейса, выполнение затруднено. С помощью этого решения вы можете просто вызвать две строки кода, когда пользователь нажимает на что-либо. – humbads