Remove sandbox mode settings and iframe sandbox branching

This commit is contained in:
2026-02-18 23:48:49 +08:00
parent 37ae0a9769
commit a183474fda
5 changed files with 14 additions and 44 deletions

View File

@@ -2,9 +2,7 @@ export function getTrustedOrigin() {
return window.location.origin;
}
export function getIframeTargetOrigin(iframe) {
const sandbox = iframe?.getAttribute?.('sandbox') || '';
if (sandbox && !sandbox.includes('allow-same-origin')) return 'null';
export function getIframeTargetOrigin() {
return getTrustedOrigin();
}

View File

@@ -30,7 +30,6 @@ import { initTts, cleanupTts } from "./modules/tts/tts.js";
extension_settings[EXT_ID] = extension_settings[EXT_ID] || {
enabled: true,
sandboxMode: false,
recorded: { enabled: true },
templateEditor: { enabled: true, characterBindings: {} },
tasks: { enabled: true, globalTasks: [], processedMessages: [], character_allowed_tasks: [] },
@@ -270,7 +269,7 @@ async function waitForElement(selector, root = document, timeout = 10000) {
function toggleSettingsControls(enabled) {
const controls = [
'xiaobaix_sandbox', 'xiaobaix_recorded_enabled', 'xiaobaix_preview_enabled',
'xiaobaix_recorded_enabled', 'xiaobaix_preview_enabled',
'scheduled_tasks_enabled', 'xiaobaix_template_enabled',
'xiaobaix_immersive_enabled', 'xiaobaix_fourth_wall_enabled',
'xiaobaix_audio_enabled', 'xiaobaix_variables_panel_enabled',
@@ -379,12 +378,6 @@ async function setupSettings() {
if (!settings.enabled) toggleSettingsControls(false);
$("#xiaobaix_sandbox").prop("checked", settings.sandboxMode).on("change", async function () {
if (!isXiaobaixEnabled) return;
settings.sandboxMode = $(this).prop("checked");
saveSettingsDebounced();
});
const moduleConfigs = [
{ id: 'xiaobaix_recorded_enabled', key: 'recorded' },
{ id: 'xiaobaix_immersive_enabled', key: 'immersive', init: initImmersiveMode },
@@ -531,7 +524,6 @@ async function setupSettings() {
}
ON.forEach(k => setChecked(MAP[k], true));
OFF.forEach(k => setChecked(MAP[k], false));
setChecked('xiaobaix_sandbox', false);
setChecked('xiaobaix_use_blob', false);
setChecked('Wrapperiframe', true);
try { saveSettingsDebounced(); } catch (e) {}

View File

@@ -358,10 +358,6 @@ export function renderHtmlInIframe(htmlContent, container, preElement) {
iframe.setAttribute('scrolling', 'no');
iframe.loading = 'eager';
if (settings.sandboxMode) {
iframe.setAttribute('sandbox', 'allow-scripts');
}
const wrapper = getOrCreateWrapper(preElement);
wrapper.querySelectorAll('.xiaobaix-iframe').forEach(old => {
try { old.src = 'about:blank'; } catch (e) {}

View File

@@ -671,8 +671,6 @@ class IframeManager {
static writeContentToIframe(iframe, content) {
try {
const html = buildWrappedHtml(content);
const sbox = !!(extension_settings && extension_settings[EXT_ID] && extension_settings[EXT_ID].sandboxMode);
if (sbox) iframe.setAttribute('sandbox', 'allow-scripts allow-modals');
iframe.srcdoc = html;
const probe = () => {
const targetOrigin = getIframeTargetOrigin(iframe);

View File

@@ -41,10 +41,6 @@
<div class="section-divider">渲染模式
<hr class="sysHR" />
</div>
<div class="flex-container">
<input type="checkbox" id="xiaobaix_sandbox" />
<label for="xiaobaix_sandbox">沙盒模式</label>
</div>
<div class="flex-container">
<input type="checkbox" id="xiaobaix_use_blob" />
<label for="xiaobaix_use_blob" class="has-tooltip" data-tooltip="大型html适用">启用Blob渲染</label>
@@ -524,7 +520,6 @@
storySummary: 'xiaobaix_story_summary_enabled',
tts: 'xiaobaix_tts_enabled',
storyOutline: 'xiaobaix_story_outline_enabled',
sandboxMode: 'xiaobaix_sandbox',
useBlob: 'xiaobaix_use_blob',
wrapperIframe: 'Wrapperiframe',
renderEnabled: 'xiaobaix_render_enabled',
@@ -541,25 +536,20 @@
if (el) { el.checked = !!enabled; try { $(el).trigger('change'); } catch (e) { } }
}
function captureStates() {
const out = { modules: {}, sandboxMode: false, useBlob: false, wrapperIframe: false, renderEnabled: true };
try { MODULE_KEYS.forEach(k => { out.modules[k] = !!(extension_settings[EXT_ID][k] && extension_settings[EXT_ID][k].enabled); }); } catch (e) { }
try { out.sandboxMode = !!extension_settings[EXT_ID].sandboxMode; } catch (e) { }
try { out.useBlob = !!extension_settings[EXT_ID].useBlob; } catch (e) { }
try { out.wrapperIframe = !!extension_settings[EXT_ID].wrapperIframe; } catch (e) { }
try { out.renderEnabled = extension_settings[EXT_ID].renderEnabled !== false; } catch (e) { }
const out = { modules: {}, useBlob: false, wrapperIframe: false, renderEnabled: true };
try { MODULE_KEYS.forEach(k => { out.modules[k] = !!(extension_settings[EXT_ID][k] && extension_settings[EXT_ID][k].enabled); }); } catch (e) { }
try { out.useBlob = !!extension_settings[EXT_ID].useBlob; } catch (e) { }
try { out.wrapperIframe = !!extension_settings[EXT_ID].wrapperIframe; } catch (e) { }
try { out.renderEnabled = extension_settings[EXT_ID].renderEnabled !== false; } catch (e) { }
return out;
}
function applyStates(st) {
if (!st) return;
try { Object.keys(st.modules || {}).forEach(k => setModuleEnabled(k, !!st.modules[k])); } catch (e) { }
try {
extension_settings[EXT_ID].sandboxMode = !!st.sandboxMode;
const el = $id('xiaobaix_sandbox'); if (el) { el.checked = !!st.sandboxMode; if (window.isXiaobaixEnabled) try { $(el).trigger('change'); } catch (e) { } }
} catch (e) { }
try {
extension_settings[EXT_ID].useBlob = !!st.useBlob;
const el = $id('xiaobaix_use_blob'); if (el) { el.checked = !!st.useBlob; if (window.isXiaobaixEnabled) try { $(el).trigger('change'); } catch (e) { } }
} catch (e) { }
try {
extension_settings[EXT_ID].useBlob = !!st.useBlob;
const el = $id('xiaobaix_use_blob'); if (el) { el.checked = !!st.useBlob; if (window.isXiaobaixEnabled) try { $(el).trigger('change'); } catch (e) { } }
} catch (e) { }
try {
extension_settings[EXT_ID].wrapperIframe = !!st.wrapperIframe;
const el = $id('Wrapperiframe'); if (el) { el.checked = !!st.wrapperIframe; if (window.isXiaobaixEnabled) try { $(el).trigger('change'); } catch (e) { } }
@@ -573,13 +563,9 @@
function applyResetDefaults() {
DEFAULTS_ON.forEach(k => setModuleEnabled(k, true));
DEFAULTS_OFF.forEach(k => setModuleEnabled(k, false));
try {
extension_settings[EXT_ID].sandboxMode = false; const sb = $id(KEY_TO_CHECKBOX.sandboxMode);
if (sb) { sb.checked = false; try { $(sb).trigger('change'); } catch (e) { } }
} catch (e) { }
try {
extension_settings[EXT_ID].useBlob = false; const bl = $id(KEY_TO_CHECKBOX.useBlob);
if (bl) { bl.checked = false; try { $(bl).trigger('change'); } catch (e) { } }
try {
extension_settings[EXT_ID].useBlob = false; const bl = $id(KEY_TO_CHECKBOX.useBlob);
if (bl) { bl.checked = false; try { $(bl).trigger('change'); } catch (e) { } }
} catch (e) { }
try {
extension_settings[EXT_ID].wrapperIframe = true; const wp = $id(KEY_TO_CHECKBOX.wrapperIframe);