Skip to content

Instantly share code, notes, and snippets.

@jerray
Created September 21, 2014 11:27
Show Gist options
  • Save jerray/88b8023d5f5a98eac9f8 to your computer and use it in GitHub Desktop.
Save jerray/88b8023d5f5a98eac9f8 to your computer and use it in GitHub Desktop.
A simple chrome message handler for chrome extensions
class BackgroundMessageHandler extends SimpleChromeMessageHandler
onHello: (name) ->
@send "reply", "OK, #{name}"
chrome.runtime.onConnect.addListener (port) ->
handler = new BackgroundMessageHandler(port)
class ContentMessageHandler extends SimpleChromeMessageHandler
onReply: (reply) ->
console.log reply
port = chrome.runtime.connect()
handler = new ContentMessageHandler(port)
handler.send 'hello', '7lemon'
class SimpleChromeMessageHandler
getEventName = (match, prefix, eventName) ->
do eventName.toUpperCase
constructor: (port) ->
@_port = port
port.onMessage.addListener _.bind(@_dispatch, this)
port.onDisconnect.addListener -> console.log 'port disconnected'
send: ->
name = _.first(arguments)
return false unless _.isString(name)
@_port.postMessage name: name, data: _.tail(arguments)
_dispatch: ({name: name, data: data}) ->
methodName = "on#{name.replace /(^|:)(\w)/gi, getEventName}"
method = this[methodName]
return false unless _.isFunction(method)
method.apply this, data
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment