JS 实现直接运行 html 代码的方法其实比较简单,一般步骤如下:
下面是具体操作过程:
创建一个 id 为 iframeId 的 iframe,并将其插入到当前页面中:
<!-- HTML 代码 -->
<iframe id="iframeId"></iframe>
// JavaScript 代码
var iframe = document.createElement('iframe');
iframe.id = 'iframeId';
document.body.appendChild(iframe);
获取 iframe 的文档对象,通过 innerHTML 添加需要运行的 html 代码:
var htmlCode = '<html><head><title>测试代码</title></head><body><p>这是一个测试页面</p></body></html>';
var iframe = document.getElementById('iframeId');
var iframeDoc = iframe.contentWindow.document;
iframeDoc.open();
iframeDoc.write(htmlCode);
iframeDoc.close();
通过 iframe 的 contentWindow 属性,获取 iframe 的 window 对象,并将需要执行的代码放在 window.onload 回调函数中:
var iframe = document.getElementById('iframeId');
var iframeWin = iframe.contentWindow;
iframeWin.onload = function() {
var textNode = document.createTextNode('这是通过 JS 添加的文本节点');
document.body.appendChild(textNode);
};
最后,通过设置 iframe 的 src 属性来加载页面,等待 iframe 的 onload 事件触发后执行代码:
iframe.src = 'about:blank';
示例1:
下面是一个通过 JS 动态创建一个 iframe 并在其中运行代码的示例:
function runHtmlCode(htmlCode) {
var iframe = document.createElement('iframe');
iframe.style.display = 'none';
document.body.appendChild(iframe);
var iframeDoc = iframe.contentWindow.document;
iframeDoc.open();
iframeDoc.write(htmlCode);
iframeDoc.close();
var iframeWin = iframe.contentWindow;
iframeWin.onload = function() {
var textNode = document.createTextNode('这是通过 JS 添加的文本节点');
document.body.appendChild(textNode);
};
iframe.src = 'about:blank';
}
runHtmlCode('<html><head><title>测试代码</title></head><body><p>这是一个测试页面</p></body></html>');
示例2:
下面是一个通过 AJAX 获取需要运行的 html 代码并动态创建 iframe 的示例:
function loadHtmlFile(url) {
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
runHtmlCode(xhr.responseText);
}
};
xhr.send();
}
function runHtmlCode(htmlCode) {
var iframe = document.createElement('iframe');
iframe.style.display = 'none';
document.body.appendChild(iframe);
var iframeDoc = iframe.contentWindow.document;
iframeDoc.open();
iframeDoc.write(htmlCode);
iframeDoc.close();
var iframeWin = iframe.contentWindow;
iframeWin.onload = function() {
var textNode = document.createTextNode('这是通过 JS 添加的文本节点');
document.body.appendChild(textNode);
};
iframe.src = 'about:blank';
}
loadHtmlFile('test.html');
本文链接:http://task.lmcjl.com/news/11682.html