Skip to content

Commit ddbc94a

Browse files
committed
ensuring content script is running, before sending content
1 parent afbbcb3 commit ddbc94a

File tree

5 files changed

+72
-27
lines changed

5 files changed

+72
-27
lines changed

Diff for: package-lock.json

+3-3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
"pull-paramap": "^1.2.2",
2424
"pull-stream": "^3.6.14",
2525
"ssb-client": "^4.9.0",
26-
"web-ext-native-msg": "^4.8.1"
26+
"web-ext-native-msg": "^4.8.2"
2727
},
2828
"devDependencies": {
2929
"@rollup/plugin-commonjs": "^17.0.0",

Diff for: site/product-review.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ <h2>Publish your own review of ${item}</h2>
165165
});
166166
}
167167

168-
})
168+
}, error => console.log(error))
169169
setTimeout(() => document.body.classList.add('waited'), 1000)
170170
</script>
171171
</body>

Diff for: src/connect-ssb-page-script.js

+49-14
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,35 @@ pull.paraMap = _pullParamap
77

88
window.pull = pull
99

10+
function ping() {
11+
window.postMessage({
12+
direction: 'from-page-script',
13+
action: 'ping'
14+
}, '*');
15+
}
16+
17+
function contentLoaded() {
18+
ping()
19+
return new Promise((resolve, reject) => {
20+
const onMessage = (event) => {
21+
if (event.source == window &&
22+
event.data &&
23+
event.data.direction == 'from-content-script') {
24+
if (event.data.action == 'ping') {
25+
window.removeEventListener('message', onMessage)
26+
resolve()
27+
}
28+
}
29+
}
30+
window.addEventListener('message', onMessage)
31+
})
32+
}
33+
1034
window.connectSsb = function() {
35+
return contentLoaded().then(connectSsbNoWait)
36+
}
37+
38+
function connectSsbNoWait() {
1139
return new Promise((resolve, reject) => {
1240

1341
let messageDataCallback = null
@@ -24,18 +52,22 @@ window.connectSsb = function() {
2452
}
2553

2654

27-
window.addEventListener("message", (event) => {
55+
window.addEventListener('message', (event) => {
2856
if (event.source == window &&
2957
event.data &&
30-
event.data.direction == "from-content-script") {
31-
const asBuffer = Buffer.from(event.data.message)
32-
if (messageDataCallback) {
33-
const _messageDataCallback = messageDataCallback
34-
messageDataCallback = null
35-
_messageDataCallback(null, asBuffer)
36-
} else {
37-
messageDataBuffer.push(asBuffer)
38-
}
58+
event.data.direction == 'from-content-script') {
59+
if (event.data.action == 'ping') {
60+
//ignored ping()
61+
} else {
62+
const asBuffer = Buffer.from(event.data.message)
63+
if (messageDataCallback) {
64+
const _messageDataCallback = messageDataCallback
65+
messageDataCallback = null
66+
_messageDataCallback(null, asBuffer)
67+
} else {
68+
messageDataBuffer.push(asBuffer)
69+
}
70+
}
3971
}
4072
});
4173

@@ -44,14 +76,15 @@ window.connectSsb = function() {
4476
source(null, function more(end,data) {
4577
if (end) return done()
4678
window.postMessage({
47-
direction: "from-page-script",
79+
direction: 'from-page-script',
4880
message: data
49-
}, "*")
81+
}, '*')
5082
source(null, more)
5183
})
5284
}
5385
}
54-
const client = MRPC(function (err, manifest) {
86+
87+
const clientBuilder = MRPC(function (err, manifest) {
5588
if (err) reject(err)
5689
else {
5790

@@ -62,7 +95,9 @@ window.connectSsb = function() {
6295

6396
resolve(client)
6497
}
65-
})()
98+
})
99+
100+
const client = clientBuilder()
66101

67102
const onClose = () => {
68103
console.log('connected to muxrpc server')

Diff for: src/content-script.js

+18-8
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,30 @@ const fromPage = function read(abort, cb) {
1616
}
1717

1818

19+
function ping() {
20+
window.postMessage({
21+
direction: "from-content-script",
22+
action: 'ping'
23+
}, window.location.origin);
24+
}
25+
1926
window.addEventListener("message", (event) => {
20-
if (event.source == window &&
21-
event.data &&
22-
event.data.direction == "from-page-script") {
27+
if (event.source == window && event.data && event.data.direction == "from-page-script") {
28+
if (event.data.action == "ping") {
29+
ping()
30+
} else {
2331
//new Uint8Array(event.data.message) is not accepted by muxrpc
2432
const asBuffer = Buffer.from(event.data.message)
2533
if (messageDataCallback) {
26-
const _messageDataCallback = messageDataCallback
27-
messageDataCallback = null
28-
_messageDataCallback(null, asBuffer)
34+
const _messageDataCallback = messageDataCallback
35+
messageDataCallback = null
36+
_messageDataCallback(null, asBuffer)
2937
} else {
3038
console.log('buffering....')
3139
messageDataBuffer.push(asBuffer)
3240
}
33-
}
41+
}
42+
}
3443
});
3544

3645
const toPage = function sink(done) {
@@ -92,4 +101,5 @@ const toBackgroundScript = function sink(done) {
92101
}*/
93102

94103
pull(fromPage, toBackgroundScript())
95-
pull(fromBackgroundScript, toPage())
104+
pull(fromBackgroundScript, toPage())
105+
ping()

0 commit comments

Comments
 (0)