#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
функцией и напрямую передавал ввод текста, но это, вероятно, плохая идея с точки зрения безопасности.