jump to navigation

Copiar y pegar Miércoles, 4 febrero 2009

Posted by israelof in Implementación.
trackback

Después de unas largas vacaciones de playa y montaña, tocaba volver a escribir en el blog, y esta vez, con uno de los post que denominamos “duros” y es que hoy toca hablar de implementación.

Vamos a hablar de cómo desarrollar las funciones de copiar y pegar. Para ello vamos a mostrar el código javascript de las funciones que hemos implementado para realizar estos cometidos.

Función para copiar:

function copy(txt) {
   if (window.clipboardData) {
      window.clipboardData.clearData();
      window.clipboardData.setData("Text", txt);
   }
   else if (window.netscape) {
      try {
         netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
      }
      catch (e) {
         alert("Unprivileged scripts cannot access Cut/Copy/Paste programatically for security reasons.\n"+
                "You need set 'signed.applets.codebase_principal_support=true' at about:config'");
         return false;
      }
      var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard);
      if (!clip)
         return;
      var trans = Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);
      if (!trans)
         return;
      trans.addDataFlavor('text/unicode');
      var str = new Object();
      var len = new Object();
      var str = Components.classes['@mozilla.org/supports-tring;1'].createInstance(Components.interfaces.nsISupportsString);
      var copytext = txt;
      str.data = copytext;
      trans.setTransferData("text/unicode",str,copytext.length*2);
      var clipid = Components.interfaces.nsIClipboard;
      if (!clip)
         return false;
      clip.setData(trans,null,clipid.kGlobalClipboard);
   }
}

Función para pegar:

function paste() {
   if(window.clipboardData) {
      txt = window.clipboardData.getData('Text');
      return txt;
   }
   else if (window.netscape) {
      try {
         netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
      }
      catch (e) {
         alert("Unprivileged scripts cannot access Cut/Copy/Paste programatically for security reasons.\n"+
                "You need set 'signed.applets.codebase_principal_support=true' at about:config'");
         return false;
      }
      var clip = Components.classes["@mozilla.org/widget/clipboard;1"].getService(Components.interfaces.nsIClipboard);
      if (!clip)
         return false;
      var trans = Components.classes["@mozilla.org/widget/transferable;1"].createInstance(Components.interfaces.nsITransferable);
      if (!trans)
         return false;
      trans.addDataFlavor("text/unicode");
      clip.getData(trans, clip.kGlobalClipboard);
      var str = new Object();
      var strLength = new Object();
      trans.getTransferData("text/unicode", str, strLength);
      if (str)
         str = str.value.QueryInterface(Components.interfaces.nsISupportsString);
      if (str)
         pastetext = str.data.substring(0, strLength.value / 2);
      txt = pastetext;
      return txt;
   }
}

Como podemos ver, en Internet Explorer a penas existen impedimentos de seguridad para poder acceder al portapapeles. Cuando ejecutemos estas funciones, el navegador nos preguntará si permitimos el acceso al portapeles y nada más.

En cambio, en Firefox la seguridad está más controlada y deberemos modificar la propia configuracion del navegador, si queremos permitir la acción de estas funciones. Aún así, cada vez que las ejecutemos nos preguntará si estamos realmente seguros de que queremos realizar esa acción. Queda así patente que los chicos de Mozilla han apostado por la seguridad.

Anuncios

Comentarios»

1. Acceder al clipboard desde JavaScript en Firefox y Explorer | Mostofreddy un blog de tecnologia y arte - Viernes, 19 marzo 2010

[…] mas info pueden visitar estas páginas: Mozilla Denied universalxpconnect privilege Copiar y pegar How To/Firefox Per-File Permissions […]


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: