Skip to content

Instantly share code, notes, and snippets.

@paladin3895
Created July 17, 2020 09:49
Show Gist options
  • Save paladin3895/5aab93f62bc1e807225f0e29994ca1c6 to your computer and use it in GitHub Desktop.
Save paladin3895/5aab93f62bc1e807225f0e29994ca1c6 to your computer and use it in GitHub Desktop.
let window;
let iframe;
window = () {
iframe.postMessage({
// process
parent.postMessage({})
});
}
// iframe
iframe {
dispatch(ACTION, payload);
window.addEventListener('message', (event) => {
if ([SHOW_AUTH, GRANT_SCOPE].indexOf(event.type) >= 0) {
dispatch(event.type, event.data);
parent.postMessage({
...event.data,
payload: store.getState(),
})
}
})
}
// window
export default serviceIframe(global, iframe) => {
return (endpoint, data) => {
let messageId = uuid.v4();
data.id = messageId;
return new Promise((resolve, reject) => {
iframe.postMessage(endpoint, data);
global.addEventListener('message', (event) => {
let { data } = event;
let { id } = data;
if (id === messageId) {
if (data.error) {
return reject(new IframeRequestError(data.error));
}
return resolve(data);
}
global.setTimeout(() => {
reject(new IframeRequestError(`request ${messageId} timeout`));
}, 3000)
})
})
}
}
let ssoService = serviceIframe(window, iframe);
ssoService('GRANT_SCOPE', {
scopes: ['write', 'read']
}).then(data => {
let { token } = data;
// process
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment