2014-02-11 4 views
6

Мне действительно нужен способ скопировать некоторый текст в буфер обмена ОС в 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, и мне нужно решение, в котором текст должен копироваться на основе нажатия кнопки (многие на одной странице).

https://stackoverflow.com/questions/4344325/copy-to-clipboard-on-firefox-and-google-chrome/11346026#11346026

Мой старый решение было так:

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

Итак, у любого есть рабочее решение?

ответ

3

решаемые путем создания Firefox Add-на, который предоставляет объект буфера обмена: https://github.com/myplaceonline/myplaceonline_ffclipboard

Пример:

if (window.ffclipboard) { 
    window.ffclipboard.setText("clipboard text"); 
} 
+0

Надстройка может быть установлена ​​в Firefox с Mozilla.org, перейдя сюда: https://addons.mozilla.org/en-US/firefox/addon/ffclipboard/ Это не требует перезагрузки. Решения на основе флеш-памяти, такие как zeroclipboard, требуют от пользователя щелчка по скрытому флеш-ролику, поэтому, если у вас есть сложное требование пользовательского интерфейса, выполнение затруднено. С помощью этого решения вы можете просто вызвать две строки кода, когда пользователь нажимает на что-либо. – humbads

4

Похоже, это больше не поддерживается, и нет никакой замены :(

https://support.mozilla.org/en-US/questions/977068#answer-500083

Может быть, сделать некоторый шум в жука Firefox поможет нам получить (безопасное) решение.

+0

Большое вам спасибо за эту ссылку. Я потратил некоторое время на поиск устаревших решений, пока не нашел ваш ответ. – Oz123

Смежные вопросы