npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

read-browser-tabs

v1.0.4

Published

(macOS only) Get active tab info from running safari or chrome

Downloads

7

Readme

Get Browser Tabs · npm version GitHub top language semantic-release

Supported platforms: macOS only. Supported browsers: Safari, Google Chrome.

Easily retrieve information about active tab from Node.js.

Usage

import { getActiveTabInfo } from "read-browser-tabs";

// if google and chrome are running safari always takes precedence by default
await getActiveTabInfo();
//=>
// {
//   erroredBrowsers: [],
//   tabInfo: {
//     url: 'https://github.com/zbrateam/Zebra',
//     title: 'GitHub - zbrateam/Zebra: A Useful Package Manager for iOS',
//     browserTitle: 'safari'
//   }
// }

await getActiveTabInfo({
    // try to get data from google chrome and if it's not running then try from safari
    browsers: ["google chrome", "safari"]
});
//=>
// {
//   erroredBrowsers: [],
//   tabInfo: {
//     url: 'https://github.com/jsdoc/jsdoc',
//     title: 'jsdoc/jsdoc: An API documentation generator for JavaScript.',
//     browserTitle: 'google chrome'
//   }
// }

// for example only safari is running
await getActiveTabInfo({
    // but here we are trying to get info from google chrome ONLY
    browsers: ["google chrome"]
});
// {
//   erroredBrowsers: [],
//   tabInfo: null
// }

Things to Note

  • It usually takes 50 - 300ms to get info. It's a good practice to add timeout for 500ms.
  • When you first run this script from app user will see the message: jxa prompt

Why?

I used get-chrome-tabs in past, but it has a huge performance issue, with handling multiple opened windows. That's because it travels over all windows and tabs and of course it takes A LOT of time. This module solves the problem by accessing only the active (focused) tab. And it supports Safari!

It Could be Better

This module VERY unreliable, like it can break in any day. Apple created JXA and it's very bad. Sometimes I get execution error: Error: Error: AppleEvent handler failed. because of .properties(). And it seems there is no official documentation for JXA, so I don't want waste my time any more. That's why this module doesn't have wide browsers support (but it could), I just don't know how to introspect properties on Application instance. Also see this answer.

Please, let me know if you have an idea how to make this module work on all platforms.