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

interframe

v2.2.0

Published

postMessage web api based lightweight interframe communication layer

Downloads

48

Readme

InterframeSponsored by Version Downloads Build Status Unix Dependencies

Communication made easy between browser frames.

Using Interframe

Interframe provides a factory function that takes a window and an origin to open a communication channel. Please provide the window object of the counterpart frame to open a communication channel with that frame.

import interframe from "interframe"

/* get reference to iframe */
const iframe = document.getElementById("myIframe")

const channel = interframe(iframe.contentWindow, "*")

Using * as origin allows communication with every other message provider.

Inside of the iframe you can open the channel via

const channel = interframe(window.top)

All communication data are stored in memory as long as the handshake is not done. As soon as the handshake is done the data are sent through the channel.

Listening for messages

Interframe allowes to add message event listeners to receive messages from the opposite side. As long as no message listener for the specific namespace is assigned messages are cached.

channel.addListener("namespace", (message) =>
{
  console.log(message.id)
  console.log(message.namespace)
  console.log(message.data)
  console.log(message.channel)
})

Sending messages

A message consist of a namespace and, optional, a serializable object.

channel.send("namespace", { foo: "bar" })

Responding to messages

As each message has a unique id interframe is able to response to messages. For this the send() method returns a promise that is resolved with a message. If response channel is not opened inside message callback the promise is rejected.

const channel1 = interframe(window, "*")
const channel2 = interframe(window, "*")

channel1.addListener("my namespace", (message) =>
{
  const responseChannel = message.open()

  setTimeout(() =>
  {
    responseChannel.response({
      hello: `Hi ${message.data.username}`
    })
  }, 1000)
})

channel2
  .send("my namespace", { username: "Sebastian" })
  .then((message) =>
  {
    console.log(message.id)
    console.log(message.namespace)
    console.log(message.data)
    console.log(message.channel)
  })

response() is a shortcut of send with preset namespace of source message.

API

function interframe(targetWindow, [origin = "*"])

returns

{
  addListener,
  removeListener,
  send,
  hasHandshake
}

This factory function returns a channel.

function addListener(namespace, callback)

returns

callback

Add callback for new messages. callback is a function with the signature (message) => {}

function removeListener(callback)

Disconnect specific callback from message events.

function send(namespace, [data])

returns

Promise<message>

Send message to opposite side. namespace is a string that defines the type of the message. data is an optional argument that must be serializable by JSON.stringify.

The returned message consists of

{
  id,
  data,
  namespace,
  response,
}
  • id is the id of the message
  • data is the optional data object (given in send())
  • namespace is the namespace (given in send())

The promise only resolves if the response()function of the message inside addListener callback is used.

function hasHandshake([callback])

returns

boolean

Returns if handshake is successfull. An optional callback is called as soon as there is a handshake.

Copyright

Copyright 2016-2019Sebastian Software GmbH