在不重新加载HTML或Javascript的情况下动态添加代码到IFrame

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在不重新加载HTML或Javascript的情况下动态添加代码到IFrame相关的知识,希望对你有一定的参考价值。

编织:http://kodeweave.sourceforge.net/editor/#5dbb5ce4a85bcaf4c5805e337c829e73

我有三个textareas:

1代表html 1用于CSS 和1代码用于javascript代码

每当在这些textareas中添加代码时(我使用的是与此帖相同的密钥),我调用一个名为runEditor的函数,它将代码添加到iframe中。

我想弄清楚的是,在添加CSS时如何在不添加HTML或JavaScript的情况下调用相同的函数?

var htmlEditor = document.querySelector(".html")
var cssEditor  = document.querySelector(".css")
var jsEditor   = document.querySelector(".js")

function runEditor() {
  var previewFrame = document.querySelector(".preview")
  var preview =  previewFrame.contentDocument ||  previewFrame.contentWindow.document

  preview.open()
  preview.write("<style>"+ cssEditor.value +"</style>" + htmlEditor.value + "<scr"+"ipt>"+ jsEditor.value +"</scr"+"ipt>")
  preview.close()
}
runEditor()

htmlEditor.onkeyup = function() {
  runEditor()
}
cssEditor.onkeyup = function() {
  runEditor()
}
jsEditor.onkeyup = function() {
  runEditor()
}
textarea {
  width: 30%;
  height: 100px;
}

.preview {
  width: 100%;
}
<textarea class="html">
<button>
  Hello world
</button>

<div class="output"></div>
</textarea>
<textarea class="css">body {
  background: #52b165;
}</textarea>
<textarea class="js">
var output  = document.querySelector(".output")
var btn     = document.querySelector("button")
var counter = 0

function addElm() {
  var node = document.createElement("div")
  var txt = document.createTextNode("hi " + counter++)
  node.appendChild(txt)
  output.appendChild(node)
}

btn.addEventListener("click", function() {
  addElm()
})
</textarea>
<iframe class="preview" sandbox="allow-forms allow-pointer-lock allow-popups allow-same-origin allow-scripts"></iframe>
答案

设置iframe时,您可以访问iframe中的windowdocument对象。您可以访问document.getElementById和朋友等方法。

要重新加载CSS,建议您在iframe中创建<style>元素。当CSS更改时,擦除该元素的内容并放入新的CSS。 HTML可以做同样的事情,消灭<body>的HTML并用新的HTML替换它。 innerHTML将是你的朋友。 JS会有点棘手。您需要从头开始重新创建iframe才能重新开始。

以上是关于在不重新加载HTML或Javascript的情况下动态添加代码到IFrame的主要内容,如果未能解决你的问题,请参考以下文章

如何在不重新加载页面的情况下更改浏览器地址栏 - HTML/Javascript [重复]

如何在不重新加载的情况下提交表单? [复制]

WKWebView 在不重新加载页面的情况下评估 Javascript

如何在不通过 HTTP 加载图像的情况下在 HTML 中显示“重新加载”符号?

如何在不重新加载页面的情况下更改页面 url

如何在不更改 javascript 中的 URL 的情况下重新加载当前页面一次?