feat: support all page URLs and iframe shortcut forwarding
This commit is contained in:
Vendored
+25
-5
@@ -1,11 +1,12 @@
|
||||
// ==UserScript==
|
||||
// @name 华谊题库助手 · CSV导出与划词检索
|
||||
// @namespace local.huayi.question-bank
|
||||
// @version 1.2.8
|
||||
// @version 1.2.9
|
||||
// @description 全网页快捷键唤出、本地题库文字检索与自动选择答案,按库导入导出;每页默认完全隐藏。
|
||||
// @match *://*/*
|
||||
// @match http://*/*
|
||||
// @match https://*/*
|
||||
// @match file:///*
|
||||
// @run-at document-start
|
||||
// @noframes
|
||||
// @grant unsafeWindow
|
||||
// @grant GM_getValue
|
||||
// @grant GM_setValue
|
||||
@@ -2375,6 +2376,19 @@ if (typeof module !== 'undefined' && module.exports) module.exports = QBCollecto
|
||||
// ---- src/app.js ----
|
||||
// UI and persistence stay inside the userscript sandbox. Page data is rendered as text.
|
||||
(() => {
|
||||
const FRAME_SHORTCUT = 'huayi-qb.frame-shortcut.v1';
|
||||
const isToggleShortcut = event => event.altKey && event.shiftKey && !event.ctrlKey && !event.metaKey &&
|
||||
(event.code === 'KeyQ' || (!event.code && String(event.key).toLowerCase() === 'q')) && !event.repeat;
|
||||
// Frames only forward the explicit shortcut. Keep one panel and one set of
|
||||
// storage/network handlers in the top page; never relay frame text or answers.
|
||||
if (window.top !== window.self) {
|
||||
window.addEventListener('keydown', event => {
|
||||
if (!isToggleShortcut(event)) return;
|
||||
event.preventDefault();
|
||||
window.top.postMessage({ type: FRAME_SHORTCUT }, '*');
|
||||
}, true);
|
||||
return;
|
||||
}
|
||||
const CONFIG_KEY = 'huayi-qb.config.v1';
|
||||
const RECORDS_KEY = 'huayi-qb.records.v1';
|
||||
const BACKUP_KEY = 'huayi-qb.records.before-dedup.v1';
|
||||
@@ -3352,11 +3366,17 @@ if (typeof module !== 'undefined' && module.exports) module.exports = QBCollecto
|
||||
}
|
||||
}, 120);
|
||||
});
|
||||
document.addEventListener('keydown', event => {
|
||||
if (event.altKey && event.shiftKey && !event.ctrlKey && !event.metaKey && event.code === 'KeyQ' && !event.repeat) {
|
||||
window.addEventListener('keydown', event => {
|
||||
if (isToggleShortcut(event)) {
|
||||
event.preventDefault(); setMode(config.mode === 'hidden' ? 'open' : 'hidden');
|
||||
}
|
||||
}, true);
|
||||
window.addEventListener('message', event => {
|
||||
if (event.data?.type !== FRAME_SHORTCUT || !event.source || event.source === window) return;
|
||||
try {
|
||||
if (event.source.top === window || event.source.top === pageWindow) setMode(config.mode === 'hidden' ? 'open' : 'hidden');
|
||||
} catch (_) { /* Ignore messages from unrelated or inaccessible windows. */ }
|
||||
});
|
||||
window.addEventListener('pagehide', () => { stopCollector('页面已离开,练习补齐已停止。'); autoAnswer.setEnabled(false); persistRecords(); });
|
||||
window.addEventListener('pageshow', event => {
|
||||
synchronizeReset();
|
||||
|
||||
Reference in New Issue
Block a user