Developing your web extension with the best tools
Aug. 19, 2024
Developing your web extension with the best tools
Developing your web extension with the best tools
Link to EXTENTOOL
Eric Masseran
·
Follow
9 min read
·
Apr 18,
--
A list of the best tools I discovered while developing the Sync Tab Groups extension and how to use them. The tools simplify and improve my coding experience. The tools are compatible with both Firefox and Chrome.
Photo by NG on UnsplashControl the browser session
Motivation
The first thing to prepare is the browser environment. I dont recommend to use your day to day session. When you develop, you do mistakes that could break the extension in your session or corrupt your data (bookmarks, open tabs).
Create a tailor-made browser session
The best tool so far for the web extension ecosystem is called web-ext. It opens a browser with a temporary session and your extension already installed. The browser is configurable to open some pages on start and to change the settings. This tool accepts both a configuration file and line parameters.
An example of a web-ext configuration to store your browser environment as codeThe change of the settings was very useful when the hidden tab API was still experimental in Firefox 59. The opened browser was compatible with the extension without any additional manual operation.
A useful page to open is the about:debugging
page in order to have access to the extension options.
You can use the extension to open some extension URLs like the options or some test pages. If you are looking for a solution, you can read the Automatically open the page section from this previous blog post.
Chrome compatibility
I found no equivalent tool for Chrome. You have to use a manual method. You can change the session by using another people. The menu is at the top right of the Chrome browser window.
An issue has been open in the web-ext repository to add an option to open Chrome instead of Firefox. The feature is already in progress, we hope it is for soon.
Lint your extension
web-ext not only controls the browser session but also embeds a linter. The linter checks the compliance with the web extension standard. By using npx web-ext lint
, you can know if your manifest respects the standards. If the extension doesnt meet the standards, it is rejected by the browser store. In order to avoid back and forth with the store, the linter warns you about your problems. In my cases, it helped me a lot to anticipate errors in the manifest.json
and in the JSON language files
.
The linter works only on the build version of the extension if you use Webpack. More especially, it only makes sense to lint the production version. The Webpack compilation often lets DANGEROUS_EVAL
and UNSAFE_VAR_ASSIGNMENT
. It is not a problem to use and release the extension with those warnings.
Translate your extension
The process to translate an extension and keeping the translation up to date could be tremendous. The translations are often not done by the developers and are not correlated with the release cycle. I developed a tool called Translate Web-Ext
to simplify the process.
The 3 pillars are:
- Setup easily: Fetch the language files over the internet
- Stay focus: Get feedback about the translations to do
- Start immediately: Translate everything from within the browser
Simple
The interface abstracts the JSON syntax. On top of that, Translate Web-Ext
gives you feedback about the changes. The new or changed fields are highlighted. Also, the words that changed are colored.
Once you are satisfied with a new translation you can mark it as done. In the end, you just have to download the JSON file with the translations inside. The downloaded file is ready to be consumed by the extension.
Setup
In order to work the translation app needs some previous JSON language files.
- The original text to translate (mandatory)
- The previous translation in order to not start from zero (optional)
- The original text at the previous translation time to see the changes (optional)
For the extension developer side, in order to use Translate Web-Ext
, you have only to make the JSON translation files available on the internet. It works like a charm with the repositories in Github
.
Any doubt, click on this link to see the translation interface in action. It is the German translation process for an extension I am developing called Sync Tab Groups. The link sets in advance the language files to fetch, so your translators dont bother with configuration. The base translation, the last one done, is at the tag v0.6 in GitHub. Whereas the targeting translation is the English one in the last release (master).
In the help section, you can find additional information on how to use Translate Web-Ext
and an URL generator with the configured language files.
How to easily test a language setting
First, you should use the linter from web-ext to verify the file format is fine. Then, I prefer to use Chrome (or Chromium) to test the interface impact. The reason is that it is easier to change the language setting so that the extension is in another language.
By developing on Linux, I could change the language like this LANG=es chromium &
. Alternative solutions are proposed in this StackOverflow thread if the previous solution doesnt work. On Mac, the only solution that worked for me was to change the language in the OS settings.
Support both Chrome and Firefox
Same code for all your browser extensions
Web Extension Polyfill is a helpful library for Chrome. It creates a browser
object bound to the chrome
object. The goal is to write the extension only with the browser
object. Then, it works on both the Firefox and Chrome browsers.
You might ask why it is useful as Firefox understands already the chrome
object well. The reason is the browser
object API uses Promises instead of callback. Although callback can do the job, Promises with async
/ await
are pleasant to use.
API differences
Today, Firefox has many more features than Chrome (hidden tabs, open discarded tabs, set window/tab variables). Check the Mozilla documentation to know which feature is available on which browser and since which version.
When I develop the extension Sync Tab Group, for targeting both browsers, I have 2 solutions:
- Share the same code and dynamically disable the missing feature at execution
- Limit the feature to the more restricted browser
As an example for the second point, I limited the commands (extension keyboard shortcuts) in the manifest to 4. It is the maximum value allowed in Chrome. Another example, on the client side this time. For my popup interface, I stopped using the menuitem API and switch to a homemade menu.
The homemade menu to work on both Firefox and ChromeBehavior changes
Not only does the API differ but also the engine is different. Here, just a few hints on Chrome behaviors:
browser.tabs.remove
could resolve the promise before the tab is really removed- Extension tabs are always closed on extension uninstallation/reload even if they dont contain a call to the
browser
API activated
event is triggered before theclose
one for windows
Tests
Testing is a core strategy for keeping quality code and to be sure the application knowledge is hardcoded into the repository.
If you are familiar with test libraries like Jest or Jasmine, you can use them with the sinon package. The package mocks all the web extension API as none of the previous test frameworks understands this API.
Interface with the integration tests for a web extensionIf you prefer to do real integration tests, you might embed a Jasmine test page into one of the web extension pages. Then you have access to the complete API and you can even bind the test page to the background script. If you are curious about all the best practices, you might enjoy this article about how to do integration tests with your web extension.
Build your extension
Description
Webpack is a most have to compile a complete JavaScript project. It manages for you the dependencies and transforms the code. It is usual to have at least 2 configurations: the development and production one. The development adds extra tooling and is more verbose whereas the production keeps only the essential and optimizes the code for speed against size and ease of reading.
The code transformations are interesting in:
- The code to be compliant with older browser
- Compiling the client code like the JSX format in React
Build the targets
A web extension is not always a single page app as there are at least a background script and an entry for each page (popup, side panel, tabs). By default, Webpack builds a JavaScript file. If you want to template and bundle an HTML page, you should look at html-webpack-plugin.
Configure more than one entry with WebpackIn my extension I didnt bundle directly HTML pages in order to control the CSS included and to import the webextension-polyfill
library (the compiled version) before everything.
If you dont include the polyfill library before any other code that calls the browser
object, it crashes on Chrome. Another option is to import the browser object in each file (import browser from "webextension-polyfill"
). Then Webpack adds and builds the necessary library.
Copy the static files
Many files are just assets for the extension, just copy them.
How to copy a bunch of assets with WebpackAdd your CSS
You could either import the CSS in the HTML pages like usually or you could import it directly in the JS code with import ../css/font-awesome.scss
. The drawback of the second method is that it duplicates the CSS in each JS target. In my project, I mostly used the first method for the CSS I wrote to avoid duplication and decrease the extension size. I only used the imported method for the Font Awesome
library. Thus, I could add it as a dependency in the package.json
and let Webpack building it for me.
For more information, please visit telescopic tools.
How to compile css/scss files including the Awesome Font libraryImport compiled libraries from the node_modules
With Webpack and the plugin copy-webpack-plugin
, you can even fetch the source from within the node_modules folder. Thus, you can have access to compiled libraries directly importable by your web extension.
Debug hints
Global variable with Webpack
You can access the extension from the console, however, when Webpack builds the extension you lose the references.
A solution is to attach the function in the source code to the window like this window.openTab = openTab;
. The function is then available in the console!
Set an environment variable with Webpack
A global variable is especially useful for knowing if you are in development mode. You can change the extension behaviors and verbosity.
Define a variable for your project with WebpackDebug from VS Code
By default, each browser offers a debug console where you can interact with the extension. However, if you want to be closer to the source code and you use VS Code, you can use a debugger extension.
Follow the documentation of the specific debugger to know how to get the debug port and how to connect to it.
It works with Firefox, however, it used to bug after a short utilization. I never tried for a few months, so the situation could be better.
Use the source map to debug with Webpack
In order to retrieve the original source code line from within a web extension built with Webpack, you have to set this in the Webpack configuration devtool: inline-source-map
.
Even if it is not the best recommendation from the Webpack documentation, only the inline type works on Firefox. Else the source map file is not found in the packaged extension. Other source map configurations seem to work on Chrome.
For more information, check the Webpack issue or the web-ext issue.
Conclusion
I hope you enjoy the tools described in this article and that they help you to improve your coding experience. Not all of them might interest you now, just pick some and come back later if the need appears.
All the tools here are implemented in the extension Sync Tab Groups. I am still looking for contributors to help me developing the extension. :)
Hair Extension Tools Every Stylist Should Have In Their Kit
Every stylist knows the importance of efficiency and precision behind the chair; one key to this is having the right tools in your kit! This year, Donna Bella Hair is all about supporting stylists with innovative, reliable, revolutionary tools to simplify and speed up the art of installs, move-ups and removals.
In this blog post, lets explore our newest lineup of extension tools designed to streamline your processes, ensuring a faster, more seamless experience. These are must-haves for hairstylists looking to stay ahead of the game and elevate their business! Keep reading for everything you need to know about our three brand new tools and the five we updated.
Thread Cutter
Introducing our game-changing thread assistant tool the Thread Cutter, a hairstylist's secret weapon for swift and precise Hybrid Weft extension removals. Have you heard of a seam ripper? A seam ripper works by carefully cutting and removing stitches in fabric, allowing for the precise and efficient removal of unwanted or incorrect sewing. Our new extensions tool has a very similar approach and is all about efficiency, boasting an ergonomic design with a comfort grip for those marathon move-up sessions. Crafted with a hardened steel cutter point, it effortlessly slices through thread, making the task of weft removal a walk in the park. Say hello to a world where removing extensions becomes as easy as a flick of the wrist!
How to Use the Thread Cutter
Ensure the sharp end faces the Hybrid Weft thread and use it to cut the thread with an upward motion. The small red ball provides an extra layer of safety between the cutter and the hair.
The Rescue Tool
Meet your new styling sidekick, the Rescue Tool! Designed for I-Link, Flat-Tip, and Hybrid Wefts, this tool turns bead removal into a breeze. It requires only a touch of pressure to remove over-clamped beads in a flash, The Rescue Tool opens and breaks beads with precision, rescuing you from any stubborn, crushed, warped, or compromised beads. This is definitely a hair extension tool many of us wish wed had 20 years ago when we first started in extensions!
How to Use The Rescue Tool
Grab the tool by the handles, slide the pinchers into each end of the compromised bead, and break it open with a small movement.
Hair Extension Tools to Update in Your Kit
These are classic Donna Bella Hair extension tools that have been upgraded.
Wider Swatches with the Updated Color Ring
With 2.5" wide swatches featuring our full lineup of colors, this isn't just a hair extension tool; it's a marketing maven and conversation starter rolled into one. Display it proudly at your station, impressing clients with the array of possibilities extensions bring. From grays to balayage, ombre to solid shades, it's the stylist's secret weapon for showcasing the vibrant world of extensions. This hands-on experience not only guarantees precision but also invites clients into the exciting realm of choosing their ideal extension shade.
The Old Version vs. The New
Whats new about our Color Ring? It now features wider hair swatches so you can see the color blend more easily and really tell what the dimensional color looks like (which also makes for an easier sale with your client when theyre in the chair!). The new Color Ring also has every shade we offer, so youll be fully up to date on what shades are available from DBH. Of all the tools in your kit, this is one of the most important to keep updated!
How to Use the Color Ring
Select one or several of our 40+ colors and hold a swatch against the ends of your client's hair to find the perfect match. Dont forget, using more than one shade is always a great idea, to give more color dimension with your client's blend.
The New Strand Stand Organizer
The new Strand Stand Organizer is a great tool for showcasing and organizing hair. Crafted from durable aluminum and plastic, this heat-resistant tool is not just stable but adjustable, offering three height settings to suit your styling needs. No more untangling chaos the handy holder speeds up installations, keeps loose hair secure, and doubles as a conversation starter for potential extension enthusiasts.
The Old Version vs. The New
The older version of our Strand Stand was made with two separate parts, requiring bulkier packaging for every order. Now you don't have to order two tools, and it comes with a handy zippered carrying bag. Weve also made the teeth at the top less sharp, so the tool is safer to use, and the base is sturdier and adjusts easier so you dont get stuck wasting time setting up the tripod. Whether you're prepping for an installation or a move-up, the Strand Stand Organizer simplifies the process, and keeps your hair organized and easy to see.
How to Use the Strand Stand Organizer
Adjust the tripod to your preferred height, ensuring a stable base. Attach the organizer tray, twist to tighten, and voila! Now you're ready to showcase hair in the top slots, making installations a breeze. When you're done using this tool, you can fold it down and use the zippered carrying case to make traveling with it easy.
The Multi Method Tool Has Replaced the Luxe Tool
Meet the Multi Method Tool use it to install and remove Flat-Tip, I-Link and Hybrid Weft beads and to remove Kera-Link extensions. Crafted from stainless steel with a padded grip, this ergonomic tool requires less gripping than before, so your hand wont get tired. Plus, more precision means less hair snagging while you install or move-up. The two different ridges give you flexibility when breaking into keratin bonds for a smooth release and removal of the extensions. Similar to our older Luxe tool, but now with a smaller size and more comfortable ergonomic design, this is a go-to stylist tool designed to fast track your next appointment so you can wow your client.
Of all our new tools, the Multi Method is one of the most functional for all of the different tasks it can help you with as a stylist.
How to Use the Multi Method Tool
Grasp the padded handles for a comfortable hold that won't tire your hand. Use the curved tip to install and remove Flat-Tip, I-Link and Hybrid Weft beads. Use the pointed tip to clamp down on beads, whether youre securing the hair during an install or opening the beads when removing hair. For Kera-Link removal, utilize the dual ridges which give you the flexibility to break apart bonds effortlessly.
The New Melting Connector
Introducing the Melting Connector your new BFF for flawless Kera-Link (fusion) extensions! This precision tool is a game-changer with its smaller, more precise tip and adjustable heat settings. Because the handle isnt as wide, its also easier to open and close so your hand wont tire as easily. The improved temperature control and safer handle design make it a breeze to use, while the professional-length cord gives you all the flexibility you need.
How to Use the Melting Connector
Power it on, set your preferred temperature, and let the magic begin. Part off a clean subsection of natural hair, secure it with a Mini Clip, and align the extension bond for a perfect zero-degree elevation. In just 2-3 seconds, the melting connector works its magic, and you'll be rolling through each row with ease.
Refill Sizes for Bond Removers
Both our alcohol-based Bond Remover and oil-based Residue Remover just got a size upgrade, and these are a game-changer for Tape-Ins and Kera-Link (fusion) extensions. Stock up and save with the bigger bottle and enjoy the ease of use with this fast-dissolving and hair-friendly solution. Plus, we've given them a makeover the removers are now clear instead of blue!
How to Use the Bond Remover and Residue Remover
For Tape-In removal, apply Bond Remover first. Spray on a single weft and wait at least 10 seconds for the solution to absorb. Then gently massage at the top of the weft to loosen. If needed, add more remover; do not force a weft out. To remove, pull down (dont peel from one side to another). For tricky wefts, use the second step of applying Residue Remover one weft at a time. Residue Remover is designed to get rid of any stubborn adhesive thats left behind.
For Kera-Link bonds, first use the grooved part of the Multi Method Tool to clamp down on the keratin bonds. Break down each bond until you see a slight color change. Once the bond has been broken down, apply Bond Remover and wait at least 10 seconds. Using the grooved part of the Multi Method Tool, clamp the keratin bond again to further break it down. Gently pull the extension down in the direction of the natural hair, releasing the extension.
For any residue that may be left in the clients hair, use Residue Remover and gently comb out. If no residue is left behind, use a comb to brush out the row removing any natural shedding.
If youre planning to reinstall hair for a move-up, ensure that the client has fully clarified, clean, product-free, dry hair to avoid any buildup near the scalp.
Conclusion
A great install starts with great tools! We hope this blog post inspired you to upgrade your kit with a new hair extension tool or two... or even take your extension skills to the next level by learning a new method. We cant wait to see the incredible transformations you create this year!
Other Posts You Might Like
Your Ultimate Guide to Buying Hair Extensions
Stylists, Show Your Existing Color Clients the Power of Hair Extensions
40
0
0
Comments
All Comments (0)