javascript - [codeplayer]当 iframe 内容是使用 javascript 从文本区域动态加载时,如何在 iframe 中查找元素

标签 javascript jquery html iframe

作为我的一个挑战,我决定做一个像 jsfiddle 这样的小代码播放器,我已经完成了所有的工作,但是当我尝试执行 JS 时,我的问题来了,当我尝试像这样调用 iframe 中的元素时:

document.getElementById("hola").innerHTML="nohola";

它只是说:

TypeError: document.getElementById(...) is null

有一个现场演示:jsfiddle.net

如何将 js 注入(inject) iframe 并调用其中的元素?

最佳答案

问题是您的 script 标记是由主文档的 document 对象创建的。

var script = document.createElement('script');

这将使其中的 javascript 作用于主文档。您必须使用 iframedocument 对象来创建它,这样 javascript 就会被限制在 iframe 中。

您可以通过 contentWindow.document 属性访问 iframe 文档,如下所示:

Check this fiddle

function runJs() {
      var iframe = document.getElementById('resultIframe');
      var frameDoc = iframe.contentDocument || iframe.contentWindow.document;
      var body = $('body', frameDoc);
      var code = $('#codeJs').find('textarea').val();
      var script = frameDoc.createElement("script");           // not document.createElement('script');
      script.setAttribute("type", "text/javascript");
      script.textContent = code; 
      body[0].appendChild(script); 
}

另请参阅这些答案

关于javascript - [codeplayer]当 iframe 内容是使用 javascript 从文本区域动态加载时,如何在 iframe 中查找元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27733772/

相关文章:

javascript - 访问 localstorage 中的 `access_token` 属性

javascript - 如果按下按钮,如何取消超时?

javascript - 确保元素高度相等

javascript - css3 图像淡入淡出

jquery - 如何在semantic-ui下拉选择中实现选项组

javascript - 如何在 jQuery ajax 完成后启用 document.write

javascript - 使用 AJAX 和 PHP 上传文件 - $_FILES 数组为空

jquery-ui - jQuery - 一个接一个地附加多个元素

javascript - 如何给出相对于特定 div 的位置

html - 如果选择标记具有可见性 :hidden,,它的值是否在表单提交时提交?