Как использовать *одно* соединение WebSocket на все вкладки?
Есть js библиотека для запуска js только в одной вкладке?Вам нужен Master/Slave, реализовать его можно использовав:
 - SharedWorker + fallback в localStorage и/или LocalConnection (Flash) — это если самому
 - BNC Connector — theprivateland.com/bncconnector/home.htm
 - Intercom.js — https://github.com/diy/intercom.js/ (работа с сокетами из коробки)
 - Wormhole.js — https://github.com/RubaXa/wormhole (в разработке, demo)
Сейчас ещё Service Worker можно добавить к этому списку.
Ну раз хотите только одно соединение на браузер, то при закрытии вкладки в которой активно соединение, открывайте новое соединение в другой вкладке. В чём проблема?
Можно сделать например так:
При установке соединения в LS указываете ID вкладки и время последнего обновления состояния. 
В других вкладках проверяете время последнего обновления состояния. Если оно больше определённого промежутка - выбираем новую вкладку и открываем там соединение. Ну и всё по новой.У меня правда было всё немного по другому... 
Я делал свой "транспорт" между вкладками браузера через LS и в итоге мог свободно общаться между вкладками... И при закрытии вкладки, я отправлял сообщение другой случайной вкладке в которой и открывалось новое соединение.