Remove sandbox mode settings and iframe sandbox branching
This commit is contained in:
@@ -2,9 +2,7 @@ export function getTrustedOrigin() {
|
|||||||
return window.location.origin;
|
return window.location.origin;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getIframeTargetOrigin(iframe) {
|
export function getIframeTargetOrigin() {
|
||||||
const sandbox = iframe?.getAttribute?.('sandbox') || '';
|
|
||||||
if (sandbox && !sandbox.includes('allow-same-origin')) return 'null';
|
|
||||||
return getTrustedOrigin();
|
return getTrustedOrigin();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
10
index.js
10
index.js
@@ -30,7 +30,6 @@ import { initTts, cleanupTts } from "./modules/tts/tts.js";
|
|||||||
|
|
||||||
extension_settings[EXT_ID] = extension_settings[EXT_ID] || {
|
extension_settings[EXT_ID] = extension_settings[EXT_ID] || {
|
||||||
enabled: true,
|
enabled: true,
|
||||||
sandboxMode: false,
|
|
||||||
recorded: { enabled: true },
|
recorded: { enabled: true },
|
||||||
templateEditor: { enabled: true, characterBindings: {} },
|
templateEditor: { enabled: true, characterBindings: {} },
|
||||||
tasks: { enabled: true, globalTasks: [], processedMessages: [], character_allowed_tasks: [] },
|
tasks: { enabled: true, globalTasks: [], processedMessages: [], character_allowed_tasks: [] },
|
||||||
@@ -270,7 +269,7 @@ async function waitForElement(selector, root = document, timeout = 10000) {
|
|||||||
|
|
||||||
function toggleSettingsControls(enabled) {
|
function toggleSettingsControls(enabled) {
|
||||||
const controls = [
|
const controls = [
|
||||||
'xiaobaix_sandbox', 'xiaobaix_recorded_enabled', 'xiaobaix_preview_enabled',
|
'xiaobaix_recorded_enabled', 'xiaobaix_preview_enabled',
|
||||||
'scheduled_tasks_enabled', 'xiaobaix_template_enabled',
|
'scheduled_tasks_enabled', 'xiaobaix_template_enabled',
|
||||||
'xiaobaix_immersive_enabled', 'xiaobaix_fourth_wall_enabled',
|
'xiaobaix_immersive_enabled', 'xiaobaix_fourth_wall_enabled',
|
||||||
'xiaobaix_audio_enabled', 'xiaobaix_variables_panel_enabled',
|
'xiaobaix_audio_enabled', 'xiaobaix_variables_panel_enabled',
|
||||||
@@ -379,12 +378,6 @@ async function setupSettings() {
|
|||||||
|
|
||||||
if (!settings.enabled) toggleSettingsControls(false);
|
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 = [
|
const moduleConfigs = [
|
||||||
{ id: 'xiaobaix_recorded_enabled', key: 'recorded' },
|
{ id: 'xiaobaix_recorded_enabled', key: 'recorded' },
|
||||||
{ id: 'xiaobaix_immersive_enabled', key: 'immersive', init: initImmersiveMode },
|
{ id: 'xiaobaix_immersive_enabled', key: 'immersive', init: initImmersiveMode },
|
||||||
@@ -531,7 +524,6 @@ async function setupSettings() {
|
|||||||
}
|
}
|
||||||
ON.forEach(k => setChecked(MAP[k], true));
|
ON.forEach(k => setChecked(MAP[k], true));
|
||||||
OFF.forEach(k => setChecked(MAP[k], false));
|
OFF.forEach(k => setChecked(MAP[k], false));
|
||||||
setChecked('xiaobaix_sandbox', false);
|
|
||||||
setChecked('xiaobaix_use_blob', false);
|
setChecked('xiaobaix_use_blob', false);
|
||||||
setChecked('Wrapperiframe', true);
|
setChecked('Wrapperiframe', true);
|
||||||
try { saveSettingsDebounced(); } catch (e) {}
|
try { saveSettingsDebounced(); } catch (e) {}
|
||||||
|
|||||||
@@ -358,10 +358,6 @@ export function renderHtmlInIframe(htmlContent, container, preElement) {
|
|||||||
iframe.setAttribute('scrolling', 'no');
|
iframe.setAttribute('scrolling', 'no');
|
||||||
iframe.loading = 'eager';
|
iframe.loading = 'eager';
|
||||||
|
|
||||||
if (settings.sandboxMode) {
|
|
||||||
iframe.setAttribute('sandbox', 'allow-scripts');
|
|
||||||
}
|
|
||||||
|
|
||||||
const wrapper = getOrCreateWrapper(preElement);
|
const wrapper = getOrCreateWrapper(preElement);
|
||||||
wrapper.querySelectorAll('.xiaobaix-iframe').forEach(old => {
|
wrapper.querySelectorAll('.xiaobaix-iframe').forEach(old => {
|
||||||
try { old.src = 'about:blank'; } catch (e) {}
|
try { old.src = 'about:blank'; } catch (e) {}
|
||||||
|
|||||||
@@ -671,8 +671,6 @@ class IframeManager {
|
|||||||
static writeContentToIframe(iframe, content) {
|
static writeContentToIframe(iframe, content) {
|
||||||
try {
|
try {
|
||||||
const html = buildWrappedHtml(content);
|
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;
|
iframe.srcdoc = html;
|
||||||
const probe = () => {
|
const probe = () => {
|
||||||
const targetOrigin = getIframeTargetOrigin(iframe);
|
const targetOrigin = getIframeTargetOrigin(iframe);
|
||||||
|
|||||||
@@ -41,10 +41,6 @@
|
|||||||
<div class="section-divider">渲染模式
|
<div class="section-divider">渲染模式
|
||||||
<hr class="sysHR" />
|
<hr class="sysHR" />
|
||||||
</div>
|
</div>
|
||||||
<div class="flex-container">
|
|
||||||
<input type="checkbox" id="xiaobaix_sandbox" />
|
|
||||||
<label for="xiaobaix_sandbox">沙盒模式</label>
|
|
||||||
</div>
|
|
||||||
<div class="flex-container">
|
<div class="flex-container">
|
||||||
<input type="checkbox" id="xiaobaix_use_blob" />
|
<input type="checkbox" id="xiaobaix_use_blob" />
|
||||||
<label for="xiaobaix_use_blob" class="has-tooltip" data-tooltip="大型html适用">启用Blob渲染</label>
|
<label for="xiaobaix_use_blob" class="has-tooltip" data-tooltip="大型html适用">启用Blob渲染</label>
|
||||||
@@ -524,7 +520,6 @@
|
|||||||
storySummary: 'xiaobaix_story_summary_enabled',
|
storySummary: 'xiaobaix_story_summary_enabled',
|
||||||
tts: 'xiaobaix_tts_enabled',
|
tts: 'xiaobaix_tts_enabled',
|
||||||
storyOutline: 'xiaobaix_story_outline_enabled',
|
storyOutline: 'xiaobaix_story_outline_enabled',
|
||||||
sandboxMode: 'xiaobaix_sandbox',
|
|
||||||
useBlob: 'xiaobaix_use_blob',
|
useBlob: 'xiaobaix_use_blob',
|
||||||
wrapperIframe: 'Wrapperiframe',
|
wrapperIframe: 'Wrapperiframe',
|
||||||
renderEnabled: 'xiaobaix_render_enabled',
|
renderEnabled: 'xiaobaix_render_enabled',
|
||||||
@@ -541,9 +536,8 @@
|
|||||||
if (el) { el.checked = !!enabled; try { $(el).trigger('change'); } catch (e) { } }
|
if (el) { el.checked = !!enabled; try { $(el).trigger('change'); } catch (e) { } }
|
||||||
}
|
}
|
||||||
function captureStates() {
|
function captureStates() {
|
||||||
const out = { modules: {}, sandboxMode: false, useBlob: false, wrapperIframe: false, renderEnabled: true };
|
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 { 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.useBlob = !!extension_settings[EXT_ID].useBlob; } catch (e) { }
|
||||||
try { out.wrapperIframe = !!extension_settings[EXT_ID].wrapperIframe; } catch (e) { }
|
try { out.wrapperIframe = !!extension_settings[EXT_ID].wrapperIframe; } catch (e) { }
|
||||||
try { out.renderEnabled = extension_settings[EXT_ID].renderEnabled !== false; } catch (e) { }
|
try { out.renderEnabled = extension_settings[EXT_ID].renderEnabled !== false; } catch (e) { }
|
||||||
@@ -552,10 +546,6 @@
|
|||||||
function applyStates(st) {
|
function applyStates(st) {
|
||||||
if (!st) return;
|
if (!st) return;
|
||||||
try { Object.keys(st.modules || {}).forEach(k => setModuleEnabled(k, !!st.modules[k])); } catch (e) { }
|
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 {
|
try {
|
||||||
extension_settings[EXT_ID].useBlob = !!st.useBlob;
|
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) { } }
|
const el = $id('xiaobaix_use_blob'); if (el) { el.checked = !!st.useBlob; if (window.isXiaobaixEnabled) try { $(el).trigger('change'); } catch (e) { } }
|
||||||
@@ -573,10 +563,6 @@
|
|||||||
function applyResetDefaults() {
|
function applyResetDefaults() {
|
||||||
DEFAULTS_ON.forEach(k => setModuleEnabled(k, true));
|
DEFAULTS_ON.forEach(k => setModuleEnabled(k, true));
|
||||||
DEFAULTS_OFF.forEach(k => setModuleEnabled(k, false));
|
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 {
|
try {
|
||||||
extension_settings[EXT_ID].useBlob = false; const bl = $id(KEY_TO_CHECKBOX.useBlob);
|
extension_settings[EXT_ID].useBlob = false; const bl = $id(KEY_TO_CHECKBOX.useBlob);
|
||||||
if (bl) { bl.checked = false; try { $(bl).trigger('change'); } catch (e) { } }
|
if (bl) { bl.checked = false; try { $(bl).trigger('change'); } catch (e) { } }
|
||||||
|
|||||||
Reference in New Issue
Block a user