diff --git a/platform/firefox/vapi-client.js b/platform/firefox/vapi-client.js index f92797f..d0a05ed 100644 --- a/platform/firefox/vapi-client.js +++ b/platform/firefox/vapi-client.js @@ -25,7 +25,7 @@ /******************************************************************************/ -(function() { +(function(self) { 'use strict'; @@ -75,23 +75,17 @@ var messagingConnector = function(response) { /******************************************************************************/ -var uniqueId = function() { - return Math.random().toString(36).slice(2); -}; - -/******************************************************************************/ - vAPI.messaging = { channels: {}, listeners: {}, requestId: 1, - connectorId: uniqueId(), setup: function() { this.connector = function(msg) { messagingConnector(JSON.parse(msg)); }; - addMessageListener(this.connectorId, this.connector); + + addMessageListener(this.connector); this.channels['vAPI'] = {}; this.channels['vAPI'].listener = function(msg) { @@ -112,7 +106,7 @@ vAPI.messaging = { return; } - removeMessageListener(this.connectorId, this.connector); + removeMessageListener(); this.connector = null; this.channels = {}; this.listeners = {}; @@ -132,7 +126,7 @@ vAPI.messaging = { } message = { - channelName: vAPI.messaging.connectorId + '|' + this.channelName, + channelName: self._sandboxId_ + '|' + this.channelName, msg: message }; @@ -154,12 +148,30 @@ vAPI.messaging = { /******************************************************************************/ +var toggleListener = function({type, persisted}) { + if ( !persisted || !vAPI.messaging.connector ) { + return; + } + + if ( type === 'pagehide' ) { + removeMessageListener(); + } + else { + addMessageListener(vAPI.messaging.connector); + } +}; + +window.addEventListener('pagehide', toggleListener, true); +window.addEventListener('pageshow', toggleListener, true); + +/******************************************************************************/ + vAPI.canExecuteContentScript = function() { return true; }; /******************************************************************************/ -})(); +})(this); /******************************************************************************/