Próbując zdeterminowaną elementu DOM przez prostą kontrolęinstanceof HTMLElement w IFRAME to nie element lub obiekt?
isElement = SomeThing instanceof Element
działa w dokumencie głównym, ale nie na (wszystkie?) Węzłów w iframe.
Przykâadowa (Google Chrome): (mdiv jest DIV w dokumencie głównym, idiv DIV jest w 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]
Istnieją różne implementacje JavaScript do dokumentu głównego i do dokumentów iframe ???
Proszę wyjaśnić mi, co jest nie tak.
przykład: (http://www.sbmintegral.sk/GITHUB/OMGWTF/obalka.xhtml)
Kod: obalka.xhtml (dokument główny)
<?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 \n"
+"ok: mdiv instanceof Element ... "+(mdiv instanceof Element)+" ... "+mdiv+"\n"
+"ok: mdiv instanceof Object ... "+(mdiv instanceof Object)+" ... "+mdiv+"\n"
+"ko: idiv instanceof Element ... "+(idiv instanceof Element)+" ... "+idiv+"\n"
+"KO : idiv instanceof Object ... "+(idiv instanceof Object)+" ... "+idiv+"\n"
;
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>
Kod: Dopis.xhtml (dokument wewnętrzny ramki)
<?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>
Wyniki obrazu (w IE, Chrome, Firefox, Opera) image omgwtf.png http://www.sbmintegral.sk/GITHUB/OMGWTF/omgwtf.png
Co to jest "Element"? w DOM 1 poziomie, najbardziej podstawowym specyfikacji DOM z 1998 roku, elementy HTML implementują interfejs 'HTMLElement'; nie ma ani nie było nigdy oficjalnego interfejsu "Element". Powiedziawszy to, dlaczego nadal używasz XHTML? Pozbyliśmy się tego wieków temu. –
Element jest konstruktorem HTMLElement! – supipd
Element jest konstruktorem HTMLElement! Obiekt jest konstruktorem dowolnego obiektu, dlatego wszystkie obiekty muszą być obiektami Objectof. Dlaczego XHTML? ... ponieważ HTML nie ma CDATA XHTML:
HTML: co jest czystsze? Jeśli HTML jest dla leniwych ludzi, którzy nie są w stanie poprawnie napisać kodu XML, XHTML oferuje (jako XML) wiele zalet jak f.e. Wyspy XML – supipd