add support for firefox android

This commit is contained in:
reya
2023-11-26 08:33:30 +07:00
parent a21ea64b8e
commit 0bb9976497
3 changed files with 35 additions and 14 deletions

View File

@@ -126,13 +126,23 @@ async function handleContentScriptMessage({type, params, host}) {
// prompt will be resolved with true or false // prompt will be resolved with true or false
let accept = await new Promise((resolve, reject) => { let accept = await new Promise((resolve, reject) => {
openPrompt = {resolve, reject} openPrompt = {resolve, reject}
const url = `${browser.runtime.getURL(
'prompt.html'
)}?${qs.toString()}`
if (browser.windows) {
browser.windows.create({ browser.windows.create({
url: `${browser.runtime.getURL('prompt.html')}?${qs.toString()}`, url,
type: 'popup', type: 'popup',
width: 600, width: 600,
height: 600 height: 600
}) })
} else {
browser.tabs.create({
url,
active: true
})
}
}) })
// denied, stop here // denied, stop here
@@ -205,6 +215,11 @@ async function handlePromptMessage({host, type, accept, conditions}, sender) {
// close prompt // close prompt
if (sender) { if (sender) {
if (browser.windows) {
browser.windows.remove(sender.tab.windowId) browser.windows.remove(sender.tab.windowId)
} else {
// Android Firefox
browser.tabs.remove(sender.tab.id)
}
} }
} }

View File

@@ -1,5 +1,7 @@
import browser from 'webextension-polyfill' import browser from 'webextension-polyfill'
const EXTENSION = 'nostrconnect'
// inject the script that will provide window.nostr // inject the script that will provide window.nostr
let script = document.createElement('script') let script = document.createElement('script')
script.setAttribute('async', 'false') script.setAttribute('async', 'false')
@@ -12,7 +14,7 @@ window.addEventListener('message', async message => {
if (message.source !== window) return if (message.source !== window) return
if (!message.data) return if (!message.data) return
if (!message.data.params) return if (!message.data.params) return
if (message.data.ext !== 'nos2x') return if (message.data.ext !== EXTENSION) return
// pass on to background // pass on to background
var response var response
@@ -28,7 +30,7 @@ window.addEventListener('message', async message => {
// return response // return response
window.postMessage( window.postMessage(
{id: message.data.id, ext: 'nos2x', response}, {id: message.data.id, ext: EXTENSION, response},
message.origin message.origin
) )
}) })

View File

@@ -1,3 +1,5 @@
const EXTENSION = 'nostrconnect'
window.nostr = { window.nostr = {
_requests: {}, _requests: {},
_pubkey: null, _pubkey: null,
@@ -29,7 +31,7 @@ window.nostr = {
_call(type, params) { _call(type, params) {
let id = Math.random().toString().slice(-4) let id = Math.random().toString().slice(-4)
console.log( console.log(
'%c[nos2x:%c' + '%c[nostrconnect:%c' +
id + id +
'%c]%c calling %c' + '%c]%c calling %c' +
type + type +
@@ -48,7 +50,7 @@ window.nostr = {
window.postMessage( window.postMessage(
{ {
id, id,
ext: 'nos2x', ext: EXTENSION,
type, type,
params params
}, },
@@ -63,13 +65,15 @@ window.addEventListener('message', message => {
!message.data || !message.data ||
message.data.response === null || message.data.response === null ||
message.data.response === undefined || message.data.response === undefined ||
message.data.ext !== 'nos2x' || message.data.ext !== EXTENSION ||
!window.nostr._requests[message.data.id] !window.nostr._requests[message.data.id]
) )
return return
if (message.data.response.error) { if (message.data.response.error) {
let error = new Error('nos2x: ' + message.data.response.error.message) let error = new Error(
`${EXTENSION}: ` + message.data.response.error.message
)
error.stack = message.data.response.error.stack error.stack = message.data.response.error.stack
window.nostr._requests[message.data.id].reject(error) window.nostr._requests[message.data.id].reject(error)
} else { } else {
@@ -77,7 +81,7 @@ window.addEventListener('message', message => {
} }
console.log( console.log(
'%c[nos2x:%c' + '%c[nostrconnect:%c' +
message.data.id + message.data.id +
'%c]%c result: %c' + '%c]%c result: %c' +
JSON.stringify( JSON.stringify(