Использование ввода текстового поля для выполнения глобальных функций в iframe

#javascript #iframe

#javascript #iframe

Вопрос:

Я создаю очень простой однострочный редактор кода. Следующий код позволяет пользователю вызывать hello функцию путем ввода parent.hello() . Функционально это то, что я ожидал, но необходимость вводить «parent» перед каждой функцией — плохой UX.

Есть ли способ деструктурировать объект window или выборочно предоставлять глобальные функции, чтобы пользователь мог просто вызывать hello() , вместо того, чтобы сначала повторно вызывать объект window?

 <input type="text" id="editor"/>
<iframe id="window"></iframe>
 
 const editor = document.getElementById("editor")
const iframe = document.getElementById("window").contentWindow.document;

window.hello = function () {
    alert("Heya")
};

editor.oninput = function (e) {
    iframe.open();
    iframe.write(`<script>${e.target.value}</script>`);
    iframe.close();
}
 

Комментарии:

1. Я не думаю, что есть способ, НО вы можете воссоздать hello метод из js iframe, например function hello(){parent.hello();} , чтобы пользователю не нужно было вводить parent .

2. Привет, Кубвимана, это разумный способ обойти. Интересно, есть ли более чистый способ все вместе. Ранее я работал с exec функцией и напрямую передавал ввод текста, но это, вероятно, плохая идея с точки зрения безопасности.