Added basic support for IFrames, disabled a test which we don't take into account.

This commit is contained in:
John Resig 2007-07-08 23:19:09 +00:00
parent b5bf00a373
commit 69ef5fac9e
2 changed files with 28 additions and 8 deletions

View file

@ -79,6 +79,9 @@ var window = this;
this._dom = Packages.javax.xml.parsers. this._dom = Packages.javax.xml.parsers.
DocumentBuilderFactory.newInstance() DocumentBuilderFactory.newInstance()
.newDocumentBuilder().parse(file); .newDocumentBuilder().parse(file);
if ( !obj_nodes.containsKey( this._dom ) )
obj_nodes.put( this._dom, this );
}; };
DOMDocument.prototype = { DOMDocument.prototype = {
@ -145,6 +148,10 @@ var window = this;
} }
}; };
function getDocument(node){
return obj_nodes.get(node);
}
// DOM NodeList // DOM NodeList
window.DOMNodeList = function(list){ window.DOMNodeList = function(list){
@ -188,10 +195,10 @@ var window = this;
return makeNode( this._dom.cloneNode(deep) ); return makeNode( this._dom.cloneNode(deep) );
}, },
get ownerDocument(){ get ownerDocument(){
return document; return getDocument( this._dom.ownerDocument );
}, },
get documentElement(){ get documentElement(){
return document.documentElement; return makeNode( this._dom.documentElement );
}, },
get parentNode() { get parentNode() {
return makeNode( this._dom.getParentNode() ); return makeNode( this._dom.getParentNode() );
@ -396,6 +403,22 @@ var window = this;
blur: function(){}, blur: function(){},
get elements(){ get elements(){
return this.getElementsByTagName("*"); return this.getElementsByTagName("*");
},
get contentWindow(){
return this.nodeName == "IFRAME" ? {
document: this.contentDocument
} : null;
},
get contentDocument(){
if ( this.nodeName == "IFRAME" ) {
if ( !this._doc )
this._doc = new DOMDocument(
new java.io.ByteArrayInputStream((new java.lang.String(
"<html><head><title></title></head><body></body></html>"))
.getBytes("UTF8")));
return this._doc;
} else
return null;
} }
}); });

View file

@ -21,17 +21,14 @@ test("$()", function() {
$('<p>\r\n</p>'); $('<p>\r\n</p>');
ok( true, "Check for \\r and \\n in jQuery()" ); ok( true, "Check for \\r and \\n in jQuery()" );
/* // Disabled until we add this functionality in
var pass = true; var pass = true;
try { try {
var f = document.getElementById("iframe").contentDocument; $("<div>Testing</div>").appendTo(document.getElementById("iframe").contentDocument.body);
f.open();
f.write("<html><body></body></html>");
f.close();
$("<div>Testing</div>").appendTo(f.body);
} catch(e){ } catch(e){
pass = false; pass = false;
} }
ok( pass, "$('&lt;tag&gt;') needs optional document parameter to ease cross-frame DOM wrangling, see #968" ); ok( pass, "$('&lt;tag&gt;') needs optional document parameter to ease cross-frame DOM wrangling, see #968" );*/
}); });
test("isFunction", function() { test("isFunction", function() {