d6701ff435
* feat(extensions): implement chrome.i18n API * refactor(extensions): use forward declaration for ScriptExecutor * fix(extensions): add message filter to handle i18n GetMessageBundle * test(extensions): add chrome.i18n tests * fix(extensions): message filter lint error * fix: remove exclusive test * fix(extensions): format api feature arrays Co-Authored-By: Jeremy Apthorp <nornagon@nornagon.net> * fix(extensions): uncomment chrome.i18n usage in old extensions test Co-authored-by: Jeremy Apthorp <nornagon@nornagon.net>
33 lines
834 B
JavaScript
33 lines
834 B
JavaScript
/* eslint-disable */
|
|
|
|
function evalInMainWorld(fn) {
|
|
const script = document.createElement('script')
|
|
script.textContent = `((${fn})())`
|
|
document.documentElement.appendChild(script)
|
|
}
|
|
|
|
async function exec(name) {
|
|
let result
|
|
switch (name) {
|
|
case 'getMessage':
|
|
result = {
|
|
id: chrome.i18n.getMessage('@@extension_id'),
|
|
name: chrome.i18n.getMessage('extName'),
|
|
}
|
|
break
|
|
case 'getAcceptLanguages':
|
|
result = await new Promise(resolve => chrome.i18n.getAcceptLanguages(resolve))
|
|
break
|
|
}
|
|
|
|
const funcStr = `() => { require('electron').ipcRenderer.send('success', ${JSON.stringify(result)}) }`
|
|
evalInMainWorld(funcStr)
|
|
}
|
|
|
|
window.addEventListener('message', event => {
|
|
exec(event.data.name)
|
|
})
|
|
|
|
evalInMainWorld(() => {
|
|
window.exec = name => window.postMessage({ name })
|
|
})
|