IFRAME 中的 HTMLElement instanceof 不是元素或对象? [英] instanceof HTMLElement in IFRAME is not Element or Object?

查看:28
本文介绍了IFRAME 中的 HTMLElement instanceof 不是元素或对象?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

通过简单的检查尝试确定 DOM 元素

isElement = SomeThing 元素的实例

适用于主文档,但不适用于 iframe 中的(所有?)节点.

示例输出(谷歌浏览器):(mdiv 是主文档中的 DIV,idiv 是 iframe 中的 DIV)

OMGWTFok: mdiv instanceof Element ... true ... [object HTMLDivElement]ok: mdiv instanceof Object ... true ... [object HTMLDivElement]ko: idiv instanceof Element ... false ... [object HTMLDivElement]KO : idiv instanceof Object ... false ... [object HTMLDivElement]

主文档和 iframe 文档有不同的 javascript 实现???

请解释一下有什么问题.

示例:(http://www.sbmintegral.sk/GITHUB/OMGWTF/obalka.xhtml)

代码:obalka.xhtml(主文档)

<身体><div id="auto_filled_commands_container">主 div id="auto_filled_commands_container"<br/><iframe id="auto_filled_commands_iframe" src='dopis.xhtml' style="width:98%;height:98%;"/>

<div><textarea id="OMGWTF" style="width:700px;height:200px">mdiv = document.getElementById("auto_filled_commands_container");ifram = document.getElementById("auto_filled_commands_iframe");idiv = ifram.contentDocument.getElementById('auto_filled_commands');OMGWTF = "OMGWTF "+"ok: mdiv instanceof Element ... "+(mdiv instanceof Element)+" ... "+mdiv+" "+"ok: mdiv instanceof Object ... "+(mdiv instanceof Object)+" ... "+mdiv+" "+"ko: idiv instanceof Element ... "+(idiv instanceof Element)+" ... "+idiv+" "+"KO : idiv instanceof Object ... "+(idiv instanceof Object)+" ... "+idiv+" ";document.getElementById('result_txta').value = OMGWTF;</textarea><br/><input type="button" value="上部文本区域中的评估代码(绕过可能的开发人员工具错误)" onclick="eval(document.getElementById('OMGWTF').value);"/><b>(2.)</b><br/><textarea id="result_txta" style="width:700px;height:100px"></textarea>

代码:Dopis.xhtml(内框文档)

<身体><div id="auto_filled_commands">IFRAME div id="auto_filled_commands"<br/><div id="afc_formular">IFRAME div id="afc_formular"<br/><input id="cmnd" type="text" value="input id='cmnd'"/><br/><input type="button" value="点击获取浏览器userAgent" onclick="var preEl = this.ownerDocument.getElementById('navUserAgent');var cdataEl = preEl.firstChild ||preEl;/* IE 不知道 CDATA ?!*/cdataEl.textContent=navigator.userAgent;"/><b>(1.)</b><pre id="navUserAgent"><![CDATA[]]>

结果图像(在 IE、Chrome、Firefox、Opera 中)
(来源:sbmintegral.sk)

解决方案

主文档和 iframe 文档有不同的 javascript 实现???

是的.iframe 有自己的环境和自己的全局变量.试试

var iwin = ifram.contentWindow;idiv instanceof iwin.HTMLElement;//真的iwin.Object 的 idiv 实例;//真的

Trying determinate DOM Element by simple check

isElement = SomeThing instanceof Element

works in main document, but not on (all?) nodes in iframe.

Example output (Google Chrome): (mdiv is DIV in main document, idiv is DIV in iframe)

OMGWTF 
ok:  mdiv instanceof Element ... true ... [object HTMLDivElement]
ok:  mdiv instanceof Object ... true ... [object HTMLDivElement]
ko:  idiv instanceof Element ... false ... [object HTMLDivElement]
KO :  idiv instanceof Object ... false ... [object HTMLDivElement] 

There are different javascript implementations for main document and for iframe documents ???

Please explain me what's wrong.

Example: (http://www.sbmintegral.sk/GITHUB/OMGWTF/obalka.xhtml)

Code: obalka.xhtml (main document)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
   <title>Obalka</title>
  </head>
  <body>
    <div id="auto_filled_commands_container">
MAIN div id="auto_filled_commands_container"<br/>
        <iframe id="auto_filled_commands_iframe" src='dopis.xhtml' style="width:98%;height:98%;"/>
    </div>
<div>
<textarea id="OMGWTF" style="width:700px;height:200px">
mdiv = document.getElementById("auto_filled_commands_container");
ifram = document.getElementById("auto_filled_commands_iframe");
idiv = ifram.contentDocument.getElementById('auto_filled_commands');
OMGWTF = "OMGWTF 
"
+"ok:  mdiv instanceof Element ... "+(mdiv instanceof Element)+" ... "+mdiv+"
"
+"ok:  mdiv instanceof Object ... "+(mdiv instanceof Object)+" ... "+mdiv+"
"
+"ko:  idiv instanceof Element ... "+(idiv instanceof Element)+" ... "+idiv+"
"
+"KO :  idiv instanceof Object ... "+(idiv instanceof Object)+" ... "+idiv+"
"
;
document.getElementById('result_txta').value = OMGWTF;
</textarea>
<br/><input type="button" value="Eval code in upper textarea (to bypass possible developer tools error)" onclick="
    eval(document.getElementById('OMGWTF').value);
"/><b>(2.)</b><br/>
<textarea id="result_txta" style="width:700px;height:100px">
</textarea>
</div>
  </body>
</html>

Code: Dopis.xhtml (inner frame document)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
   <title>Dopis</title>
  </head>
  <body>
    <div id="auto_filled_commands">
IFRAME div id="auto_filled_commands"<br/>
        <div id="afc_formular">
IFRAME div id="afc_formular"<br/>
<input id="cmnd" type="text" value="input id='cmnd'" />
<br/><input type="button" value="Click to get browser userAgent" onclick="
    var preEl = this.ownerDocument.getElementById('navUserAgent');
    var cdataEl = preEl.firstChild || preEl;    /* IE don't know CDATA ?! */
    cdataEl.textContent=navigator.userAgent;
"/><b>(1.)</b>
<pre id="navUserAgent"><![CDATA[
]]></pre>
        </div>
    </div>
  </body>
</html>

Results image (in IE, Chrome, Firefox, Opera)
(source: sbmintegral.sk)

解决方案

There are different javascript implementations for main document and for iframe documents ???

Yes. The iframe has its own environment with its own globals. Try

var iwin = ifram.contentWindow;
idiv instanceof iwin.HTMLElement; // true
idiv instanceof iwin.Object; // true

这篇关于IFRAME 中的 HTMLElement instanceof 不是元素或对象?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
前端开发最新文章
热门教程
热门工具
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆