#javascript #ruby-on-rails #iframe #vue.js
#javascript #ruby-on-rails #iframe #vue.js
Вопрос:
Я столкнулся с очень странной проблемой, когда мне нужно иметь iframe внутри шаблона vue, а затем редактировать этот iframe позже. Мне удалось свести это к следующему коду:
<html>
<body>
<div id="app">
<iframe id="testFrame" src="javascript:''" width="500" height="500">
</iframe>
<!-- This iframe is coming from the rails `yield` helper function. However this is the MCVE of our problem. -->
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.0.3/vue.min.js"></script>
<script>
var doc = document.getElementById('testFrame').contentWindow.document;
doc.open();
doc.write('<html><head><title></title></head><body>Hello world.</body></html>');
doc.close();
new Vue({
el: '#app'
});
</script>
</body>
</html>
Однако созданный iframe показан здесь:
Однако желаемое поведение заключается в том, чтобы текст отображался так, как показано ниже:
Что может вызвать эту проблему и как мне лучше всего ее исправить? (Пожалуйста, обратите внимание, что это чрезвычайно упрощенная версия минимального полного проверяемого примера очень большого приложения rails, над которым я работаю. )
Комментарии:
1. Vue 1.x или 2.x? Моя первоначальная мысль заключается в том, что когда шаблон будет смонтирован, он полностью заменит тот
<iframe>
, который у вас есть в вашем<div>
теге. Я думаю<iframe>
, что это должно быть частью шаблона (если это вообще возможно). Просто предположение.2. Это версия 2.0, к сожалению, на самом деле невозможно перенести все это в шаблоны vue, поскольку это всего лишь чрезвычайно упрощенная версия. Фактическое приложение использует сочетание webpack, yarn, vue, rails, tinymce и нескольких других программных пакетов.
3. Просто выстрел в темноте, но добавляет ли добавление
v-pre
вiframe
справку?4. @BillCriswell Нет, похоже, это не имеет значения. Спасибо за предложение, хотя 🙂
Ответ №1:
То, что вы делаете, — это XSS. Браузеры этого не допускают.