javascriptcompressionuserscriptsgreasemonkey-4violentmonkey

Violentmonkey How to compress string


I am relatively new to Javascript and am currently making a Violentmonkey script. In my script I have a relatively big string that I want to compress but I don't know how I would do that since most methods I found only where using external libraries (which I don't know if or how to use in Violentmonkey).

So what's the best way of compressing a string in Violentmonkey? Thanks in advance 😊


Solution

  • You can @require a CDN link to the lz-string library, and use it to decompress a pre-encoded base64 string.

    Encode your original string using LZString.compressToBase64 and store it inside the script like below:

    // ==UserScript==
    // @name        Display Gettysburg Address
    // @namespace   Stack Overflow
    // @match       https://stackoverflow.com/questions/75940976/*
    // @grant       none
    // @version     1.0.0
    // @author      Mr. Polywhirl
    // @description Displays the Gettysburg Address from a Base64 lz-string
    // @require     https://cdnjs.cloudflare.com/ajax/libs/lz-string/1.4.4/lz-string.min.js
    // ==/UserScript==
    (function() {
      'use strict'
      const main = () => {
        const decompressedText = LZString.decompressFromBase64(compressedText.trim());
        alert(decompressedText);
      };
    
      // https://people.sc.fsu.edu/~jburkardt/m_src/ncm_test/gettysburg.txt
      const compressedText = `
          GIewrgTgzgxiEFMAEBDAdgEyVBA3BaSAngitKgOYhLgRIBmKALgBYLkBGE4FLTD8VjUKsAllABQcN
          E1FoC/FEnkB3Zc1Eg0AGiTSYCUfixykAG1Ed2TIqkxIMCDKJjMnSJtVYIJAB26+IFCisloeLMyoZm
          ZIALYEqIh6iG5YCACOYChmAHQSAHIgairIZMgEFCgU7qZKFCn8MEaiMSpkukwIULJoFEgqbN50rJF
          oGloS8Ha2Y6GEUNT6hsZ2WAsOTi6peujmWn0EGJAIOUgA6qWIEvH8YXUNSBzMTGbI9KIIZlgg9OGR
          bRBThckBF8HoQPEPNRHM5XJ1UH5BJpCD8/vx3p8MLoUFBUAw5NkkIhunI+r4zCgDAJhiwgsgBtQ2F
          dKmDvKI6BZ8LiRvweeo5nFRLx+JyTkgAJL8cRRTzVIYSd5MHp9dBYfwgXzsNH9ZBQWlgL4OLwscR5
          ABCYCYulq5jI1ToODQOF0JR2hDQIH4MK28IAtDq3cpPeCnQgYBA3BJ/a7XO7gxFokUkP6xLj6uBMK
          cACpsR4RsHxHTmZq9VYbFBYiQM7BMCBgCgUV5YJkIXSg5DSHDh7YhXSMOgoDggMG0JCBKaBErDEAS
          CvfOiOWuUpjZ3MqeCGlQtGIWJWvIOdXQejn7IkIeKxKwQF0RJhV3UoWwt3QcS1IEKB+T4Oj0eBy/q
          3uECC2M4zbsGKkrvriv4QBIYDcrmnKkroEZDB01BWBssLbC2UJAUgYBoO8aDiGwWDrhAADWVYmjAL
          BAbY1a/vWfAguBIIoKyLDwQwZDYNQHocGYtgVrg6AGBgpyQeIEioUy1IEdyGHILh3pwu4nj4fUpC8
          jilFnrEKByKSEhWDByA8SmgH0NwsRATgIJaPA7iOBWAZMCglHIHI4akDgWCOLgnrIhIml8q48FvFM
          AwuPR3i2CyyDeLa3QMAaMTxDixw0L8gXBRMVn/Cp7EmrwwlngsZhcZE3gOa5awJjEHr8O2DgfCYaA
          SGJpiFbyJq4rMyK6IRjh0AA4iAWLYI1HFgkoqiPOyQg/AqiBOBCyZlnyVDfmgha3L8yWahqrwvrYR
          0ICdrYKd4fiXeS116tkTXBpqECkQwtn4aQECsDkQA=
      `.replace(/\s+/g, '');
    
      main();
    })();