add workaround to Chrome clipboard.readText
For some reason this doesn't work on Firefox, so keep using the new API for Firefox
This commit is contained in:
parent
d3f51690f8
commit
48776145d6
@ -5,6 +5,8 @@
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="clipboard-paste-target" contenteditable="true"></div>
|
||||
|
||||
<script src="/mixed/lib/dexie.min.js"></script>
|
||||
<script src="/mixed/lib/handlebars.min.js"></script>
|
||||
<script src="/mixed/lib/jszip.min.js"></script>
|
||||
|
@ -401,3 +401,11 @@ async function apiFocusTab(tab) {
|
||||
// Edge throws exception for no reason here.
|
||||
}
|
||||
}
|
||||
|
||||
async function apiClipboardGet() {
|
||||
const clipboardPasteTarget = utilBackend().clipboardPasteTarget;
|
||||
clipboardPasteTarget.innerText = '';
|
||||
clipboardPasteTarget.focus();
|
||||
document.execCommand('paste');
|
||||
return clipboardPasteTarget.innerText;
|
||||
}
|
||||
|
@ -30,6 +30,8 @@ class Backend {
|
||||
this.isPreparedResolve = null;
|
||||
this.isPreparedPromise = new Promise((resolve) => (this.isPreparedResolve = resolve));
|
||||
|
||||
this.clipboardPasteTarget = document.querySelector('#clipboard-paste-target');
|
||||
|
||||
this.apiForwarder = new BackendApiForwarder();
|
||||
}
|
||||
|
||||
@ -187,7 +189,8 @@ Backend.messageHandlers = {
|
||||
forward: ({action, params}, sender) => apiForward(action, params, sender),
|
||||
frameInformationGet: (params, sender) => apiFrameInformationGet(sender),
|
||||
injectStylesheet: ({css}, sender) => apiInjectStylesheet(css, sender),
|
||||
getEnvironmentInfo: () => apiGetEnvironmentInfo()
|
||||
getEnvironmentInfo: () => apiGetEnvironmentInfo(),
|
||||
clipboardGet: () => apiClipboardGet()
|
||||
};
|
||||
|
||||
window.yomichan_backend = new Backend();
|
||||
|
@ -17,6 +17,12 @@
|
||||
*/
|
||||
|
||||
|
||||
let IS_FIREFOX = null;
|
||||
(async () => {
|
||||
const {browser} = await apiGetEnvironmentInfo();
|
||||
IS_FIREFOX = ['firefox', 'firefox-mobile'].includes(browser);
|
||||
})();
|
||||
|
||||
class DisplaySearch extends Display {
|
||||
constructor() {
|
||||
super(document.querySelector('#spinner'), document.querySelector('#content'));
|
||||
@ -235,7 +241,13 @@ class DisplaySearch extends Display {
|
||||
|
||||
startClipboardMonitor() {
|
||||
this.clipboardMonitorIntervalId = setInterval(async () => {
|
||||
const curText = (await navigator.clipboard.readText()).trim();
|
||||
let curText = null;
|
||||
// TODO get rid of this and figure out why apiClipboardGet doesn't work on Firefox
|
||||
if (IS_FIREFOX) {
|
||||
curText = (await navigator.clipboard.readText()).trim();
|
||||
} else if (IS_FIREFOX === false) {
|
||||
curText = (await apiClipboardGet()).trim();
|
||||
}
|
||||
if (curText && (curText !== this.clipboardPrevText)) {
|
||||
if (this.isWanakanaEnabled()) {
|
||||
this.query.value = window.wanakana.toKana(curText);
|
||||
|
@ -72,3 +72,7 @@ function apiInjectStylesheet(css) {
|
||||
function apiGetEnvironmentInfo() {
|
||||
return utilInvoke('getEnvironmentInfo');
|
||||
}
|
||||
|
||||
function apiClipboardGet() {
|
||||
return utilInvoke('clipboardGet');
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user