Use global object for listener count and messaging endpoints.
This commit is contained in:
parent
dd7358cbb4
commit
df1fa80ff6
1 changed files with 19 additions and 15 deletions
|
@ -114,29 +114,33 @@ const SUPPORTED_WIDGET_API_VERSIONS = [
|
||||||
|
|
||||||
import dis from './dispatcher';
|
import dis from './dispatcher';
|
||||||
|
|
||||||
let listenerCount = 0;
|
if (!global.mxWidgetMessagingListenerCount) {
|
||||||
let messageEndpoints = [];
|
global.mxWidgetMessagingListenerCount = 0;
|
||||||
|
}
|
||||||
|
if (!global.mxWidgetMessagingMessageEndpoints) {
|
||||||
|
global.mxWidgetMessagingMessageEndpoints = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Register widget message event listeners
|
* Register widget message event listeners
|
||||||
*/
|
*/
|
||||||
function startListening() {
|
function startListening() {
|
||||||
if (listenerCount === 0) {
|
if (global.mxWidgetMessagingListenerCount === 0) {
|
||||||
window.addEventListener("message", onMessage, false);
|
window.addEventListener("message", onMessage, false);
|
||||||
}
|
}
|
||||||
listenerCount += 1;
|
global.mxWidgetMessagingListenerCount += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* De-register widget message event listeners
|
* De-register widget message event listeners
|
||||||
*/
|
*/
|
||||||
function stopListening() {
|
function stopListening() {
|
||||||
listenerCount -= 1;
|
global.mxWidgetMessagingListenerCount -= 1;
|
||||||
if (listenerCount === 0) {
|
if (global.mxWidgetMessagingListenerCount === 0) {
|
||||||
window.removeEventListener("message", onMessage);
|
window.removeEventListener("message", onMessage);
|
||||||
}
|
}
|
||||||
if (listenerCount < 0) {
|
if (global.mxWidgetMessagingListenerCount < 0) {
|
||||||
// Make an error so we get a stack trace
|
// Make an error so we get a stack trace
|
||||||
const e = new Error(
|
const e = new Error(
|
||||||
"WidgetMessaging: mismatched startListening / stopListening detected." +
|
"WidgetMessaging: mismatched startListening / stopListening detected." +
|
||||||
|
@ -153,14 +157,14 @@ function stopListening() {
|
||||||
*/
|
*/
|
||||||
function addEndpoint(widgetId, endpointUrl) {
|
function addEndpoint(widgetId, endpointUrl) {
|
||||||
const endpoint = new WidgetMessageEndpoint(widgetId, endpointUrl);
|
const endpoint = new WidgetMessageEndpoint(widgetId, endpointUrl);
|
||||||
if (messageEndpoints && messageEndpoints.length > 0) {
|
if (global.mxWidgetMessagingMessageEndpoints && global.mxWidgetMessagingMessageEndpoints.length > 0) {
|
||||||
if (messageEndpoints.filter(function(ep) {
|
if (global.mxWidgetMessagingMessageEndpoints.filter(function(ep) {
|
||||||
return (ep.widgetId === widgetId && ep.endpointUrl === endpointUrl);
|
return (ep.widgetId === widgetId && ep.endpointUrl === endpointUrl);
|
||||||
}).length > 0) {
|
}).length > 0) {
|
||||||
// Message endpoint already registered
|
// Message endpoint already registered
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
messageEndpoints.push(endpoint);
|
global.mxWidgetMessagingMessageEndpoints.push(endpoint);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -171,12 +175,12 @@ function addEndpoint(widgetId, endpointUrl) {
|
||||||
* @return {boolean} True if endpoint was successfully removed
|
* @return {boolean} True if endpoint was successfully removed
|
||||||
*/
|
*/
|
||||||
function removeEndpoint(widgetId, endpointUrl) {
|
function removeEndpoint(widgetId, endpointUrl) {
|
||||||
if (messageEndpoints && messageEndpoints.length > 0) {
|
if (global.mxWidgetMessagingMessageEndpoints && global.mxWidgetMessagingMessageEndpoints.length > 0) {
|
||||||
const length = messageEndpoints.length;
|
const length = global.mxWidgetMessagingMessageEndpoints.length;
|
||||||
messageEndpoints = messageEndpoints.filter(function(endpoint) {
|
global.mxWidgetMessagingMessageEndpoints = global.mxWidgetMessagingMessageEndpoints.filter(function(endpoint) {
|
||||||
return (endpoint.widgetId != widgetId || endpoint.endpointUrl != endpointUrl);
|
return (endpoint.widgetId != widgetId || endpoint.endpointUrl != endpointUrl);
|
||||||
});
|
});
|
||||||
return (length > messageEndpoints.length);
|
return (length > global.mxWidgetMessagingMessageEndpoints.length);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -236,7 +240,7 @@ function trustedEndpoint(origin) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return messageEndpoints.some((endpoint) => {
|
return global.mxWidgetMessagingMessageEndpoints.some((endpoint) => {
|
||||||
return endpoint.endpointUrl === origin;
|
return endpoint.endpointUrl === origin;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue