add a workaround for Chrome 65 bug https://crbug.com/714373

This commit is contained in:
tophf 2018-01-07 14:25:39 +03:00
parent a6e2cf47ed
commit 3df4a86428

View File

@ -277,33 +277,31 @@ $('#file-all-styles').onclick = () => {
API.getStyles().then(styles => { API.getStyles().then(styles => {
const text = JSON.stringify(styles, null, '\t'); const text = JSON.stringify(styles, null, '\t');
const blob = new Blob([text], {type: 'application/json'}); const blob = new Blob([text], {type: 'application/json'});
const objectURL = URL.createObjectURL(blob); const url = URL.createObjectURL(blob);
let link = $create('a', { let link = $create('a', {
href: objectURL, href: url,
type: 'application/json', type: 'application/json',
download: generateFileName(), download: generateFileName(),
}); });
// TODO: remove the fallback when FF multi-process bug is fixed // https://crbug.com/714373
if (!FIREFOX) { if (!FIREFOX && !(CHROME > 3310 && CHROME < Infinity)) {
link.dispatchEvent(new MouseEvent('click')); link.dispatchEvent(new MouseEvent('click'));
setTimeout(() => URL.revokeObjectURL(objectURL)); return doTimeout()
} else { .then(() => URL.revokeObjectURL(url));
const iframe = document.body.appendChild($create('iframe', {
style: 'width: 0; height: 0; position: fixed; opacity: 0;'.replace(/;/g, '!important;'),
}));
doTimeout()
.then(() => {
link = iframe.contentDocument.importNode(link, true);
iframe.contentDocument.body.appendChild(link);
})
.then(() => doTimeout())
.then(() => link.dispatchEvent(new MouseEvent('click')))
.then(() => doTimeout(1000))
.then(() => {
URL.revokeObjectURL(objectURL);
iframe.remove();
});
} }
const iframe = document.body.appendChild($create('iframe', {
style: 'width: 0; height: 0; position: fixed; opacity: 0;'.replace(/;/g, '!important;'),
}));
return doTimeout()
.then(() => {
link = iframe.contentDocument.importNode(link, true);
iframe.contentDocument.body.appendChild(link);
})
.then(() => doTimeout())
.then(() => link.dispatchEvent(new MouseEvent('click')))
.then(() => doTimeout(1000))
.then(() => URL.revokeObjectURL(url))
.then(() => iframe.remove());
}); });
function doTimeout(ms) { function doTimeout(ms) {