|resources:||Home Mailing List Installation Source Code Members Screenshots|
0.17 released with FF2 support
now using mozdev.org
copyright (c) 2005-2006 mark l. chang
This extension was designed to work with the 1.0+ series of Firefox. It is released under the GNU Public License.
Essentially, this extension is a collaborative web browser. "Collaborative" is a bit of a stretch, so we should actually think of it in a leader/follower sense. With cobrowse installed, one user can start a "server" that will accept incoming connections (currently on port 5000) from folks that have chosen to connect via "client mode".
The server browser then sends every web page navigation change to every client. It even works when changing tabs!
This code borrows heavily from these resources:
- Google Maps Live! - I borrowed a lot of the client/server model code from here
- Firefox toolbar tutorial - Just awesome. Thanks!
- Roachfiend's "how to create firefox extensions" tutorial - I got my first template/bundle here! Thanks!
- XUL Planet - The reference you need.
- FirefoxDeveloper.com - Guide to using the nsIWebProgressListener interface.
- 25-oct-2006 v0.17: added firefox 2.0 support. no functional changes.
- 04-dec-2005 v0.16: added firefox 1.5 support. no functional changes.
- 14-nov-2005 v0.15: changed the update mechanism to point at addons.mozilla.org instead of this site. this was done at the request of the addons.mozilla.org team, as they would like all updates to be served from their hosts.
- 13-nov-2005 v0.14: added connected client count to server, added "copy hostname to clipboard" button to make it easy to send your hostname over aim or something to your buddies
- 12-nov-2005 v0.13: oh, so sad. i messed up the packaging into xpi badly. fixed, so you get a new version number. you may have to manually uninstall the previous versions. I'm very sorry. Will teach me to test more
- 12-nov-2005 v0.12: fixed version number issues. no added functionality
- 11-nov-2005 v0.11: same-day update -- added updating capability
- 11-nov-2005 v0.10: first release
- actual real error handling :)
- make preferences work
- user-selectable ports
Q: How does this thing work?
A: Basically, one person drives (serves) and one any number of people ride along (clients). The server hosts a session and clients connect to the server. When the server navigates to a new site (by clicking on a link, entering a new URL in the navigation bar, or switching tabs), all the clients go to that site as well. There you have it, collaborative browsing (the really simply kind).
Q: Ok, how do I do get this thing going?
A: First, someone has to be the server. That person simpl clicks on the Serve button in the toolbar. Now, any number of clients can connect to this server by putting either the IP address or the host name of the server machine into the pull-down / text entry box and clicking the Connect button. It's that easy.
Q: What do the other buttons do?
A: Copy hostname simply copies your computer's host name into your clipboard. The intention is to make it easy to send your friends your hostname when you are serving a CoBrowse session. Just start your server, click Copy hostname, and paste that into an email or instant message to your friends. The other buttons simply stop the client and server. Note that the Serve button turns into a Stop (0) button, where the number in parentheses indicates the current number connected clients.
Q: Whoa, it remembers servers!
A: Yes. When you connect to a server as a client, it keeps that in the pull-down list so you can easily connect to that server again.
Q: Can I get a screen shot?
A: Sure, I can do that. Check out the non-fuzzified spot in the picture.
Q: Can you give us more technical details?
A: Yes. First, bust open the XPI and look at the source if you want the real details. In short, the server opens port 5000 on your computer and accepts TCP connections. Messages sent between server and client are simple ASCII messages that contain only the URL being navigated to, nothing else. And as of now, no access control checking goes on before a client is allowed to connect. That may be implemented later on. But for now, I wanted to keep things simple.