Zkopírujte text do schránky z bookmarkletu

Snažím se napsat malý bookmarklet, který dokáže extrahovat nějaký text z aktivní stránky a načíst ho do schránky.

Extrakce je dostatečně snadná, ale opravdu jsem se zasekl při kopírování do schránky. Momentálně jsem jen alert zadejte text a stiskněte Ctrl +C zkopírovat text ze schránky, což není ideální.

Přečetl jsem si How to Copy to Clipboard in JavaScript a další otázky, které naznačují, že bych měl používat zeroclipboard, ale nemám ponětí, jak by to fungovalo z bookmarkletu , vzhledem k tomu, že musím načíst externí flash a javascriptové prostředky, aby bylo možné knihovnu používat.

Nemám žádné problémy se zpackáním DOM stránky, abych toho dosáhl, nebo s tím, že musím povolit některá oprávnění v mém prohlížeči (Google Chrome), protože se jedná pouze o soukromý bookmarklet.

Jakékoli odkazy by byly oceněny.

Odpověď

Pár prohlášení:

  1. Nesnažím se vás spamovat
  2. Pokud se rozhodnete toto použít, nic nezískám

Před časem jsem vytvořil generátor záložek, aby mi usnadnil vytváření záložek.

Je povoleno jQuery, ale to neznamená, že máte používat jQuery.

Můžete se podívat na zdroj a zjistit, jak importovat další skript/knihovnu na stránku prostřednictvím bookmarkletu.

Zejména řádky, které importují jQuery:

if (!window.zbooks)
  {
    //if zbooks hasn't been set, initialize it

    //s used for the Script element
    var s = document.createElement('script');
    //r used for the Ready state
    var r = false;
    //set the script to the latest version of jQuery
    s.setAttribute('src', 'http://code.jquery.com/jquery-latest.min.js');
    //set the load/readystate events
    s.onload = s.onreadystatechange = function()
    {
/**
 * LOAD/READYSTATE LOGIC
 * execute if the script hasn't been ready yet and:
 * - the ready state isn't set
 * - the ready state is complete
 *   - note: readyState == 'loaded' executes before the script gets called so
 *     we skip this event because it wouldn't have loaded the init event yet.
 */
      if ( !r && (!this.readyState || this.readyState == 'complete' ) )
      {
        //set the ready flag to true to keep the event from initializing again
        r = true;
        //prevent jQuery conflicts by placing jQuery in the zbooks object
        window.zbooks = {'jQuery':jQuery.noConflict()};
        //make a new zbook
        window.zbooks[n] = new zbooks(c);
      }
    };
    //append the jQuery script to the body
    b.appendChild(s);
  }

Doufám, že to pomůže.