在不重新加载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中的window
和document
对象。您可以访问document.getElementById
和朋友等方法。
要重新加载CSS,建议您在iframe中创建<style>
元素。当CSS更改时,擦除该元素的内容并放入新的CSS。 HTML可以做同样的事情,消灭<body>
的HTML并用新的HTML替换它。 innerHTML
将是你的朋友。 JS会有点棘手。您需要从头开始重新创建iframe才能重新开始。
以上是关于在不重新加载HTML或Javascript的情况下动态添加代码到IFrame的主要内容,如果未能解决你的问题,请参考以下文章
如何在不重新加载页面的情况下更改浏览器地址栏 - HTML/Javascript [重复]
WKWebView 在不重新加载页面的情况下评估 Javascript