Skip to content

Commit 9254258

Browse files
committed
1 parent 238efb6 commit 9254258

File tree

3 files changed

+37
-17
lines changed

3 files changed

+37
-17
lines changed

src/browser/extension/inject/contentScript.js

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,22 @@ function connect() {
3535
});
3636
}
3737

38+
function tryCatch(fn, args) {
39+
try {
40+
return fn(args);
41+
} catch (err) {
42+
/* eslint-disable no-console */
43+
if (process.env.NODE_ENV !== 'production') console.error('Failed to send message', err);
44+
/* eslint-enable no-console */
45+
}
46+
}
47+
48+
function send(message) {
49+
if (!bg) connect();
50+
if (message.type === 'INIT_INSTANCE') bg.postMessage({ name: 'INIT_INSTANCE' });
51+
else bg.postMessage({ name: 'RELAY', message });
52+
}
53+
3854
// Resend messages from the page to the background script
3955
window.addEventListener('message', function(event) {
4056
if (!isAllowed()) return;
@@ -46,13 +62,5 @@ window.addEventListener('message', function(event) {
4662
return;
4763
}
4864

49-
try {
50-
if (!bg) connect();
51-
if (message.type === 'INIT_INSTANCE') bg.postMessage({ name: 'INIT_INSTANCE' });
52-
else bg.postMessage({ name: 'RELAY', message });
53-
} catch (err) {
54-
/* eslint-disable no-console */
55-
if (process.env.NODE_ENV !== 'production') console.error('Failed to send message', err);
56-
/* eslint-enable no-console */
57-
}
65+
tryCatch(send, message);
5866
}, false);

src/browser/extension/inject/pageScript.js

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -52,12 +52,7 @@ window.devToolsExtension = function(reducer, preloadedState, config) {
5252
if (shouldSerialize || window.devToolsOptions.serialize) {
5353
toContentScript(message, true, config.serializeState, config.serializeAction);
5454
} else {
55-
try {
56-
toContentScript(message);
57-
} catch (err) {
58-
toContentScript(message, true);
59-
shouldSerialize = true;
60-
}
55+
toContentScript(message);
6156
}
6257
}
6358

src/browser/extension/utils/contentScriptMsg.js

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { stringify } from 'jsan';
22

33
const listeners = {};
44
export const source = '@devtools-page';
5+
let isCircular;
56

67
/*
78
function stringify(obj) {
@@ -16,12 +17,28 @@ export function generateId(instanceId) {
1617
return instanceId || Math.random().toString(36).substr(2);
1718
}
1819

20+
21+
function tryCatch(fn, args) {
22+
try {
23+
return fn(args);
24+
} catch (err) {
25+
isCircular = true;
26+
toContentScript(args);
27+
}
28+
}
29+
30+
function send(message) {
31+
window.postMessage(message, '*');
32+
}
33+
1934
export function toContentScript(message, shouldStringify, serializeState, serializeAction) {
20-
if (shouldStringify) {
35+
if (shouldStringify || isCircular) {
2136
if (message.payload) message.payload = stringify(message.payload, serializeState);
2237
if (message.action) message.action = stringify(message.action, serializeAction);
38+
send(message);
39+
} else {
40+
tryCatch(send, message);
2341
}
24-
window.postMessage(message, '*');
2542
}
2643

2744
export function sendMessage(action, state, shouldStringify, id) {

0 commit comments

Comments
 (0)