www.webdeveloper.com
Results 1 to 2 of 2

Thread: [RESOLVED] iframe html

  1. #1
    Join Date
    Aug 2010
    Posts
    51

    resolved [RESOLVED] iframe html

    I'm making a function that uses a dynamically created form and iframe to simulate ajax without the domain constraints. I've gotten the user function to call but my problem is that I cannot find any information that allows me to get all the html as plain text not just what's inside the root element ( meaning I want the doctype too ).

    If anyone knows how to do this I would be grateful. Here is my code so far:
    Code:
    function xCjax( info, call, calldata )
    {
    	var x, url, method = "GET", body, form, iframe, i, txt, icall;
    	if ( typeof call !== 'function' )
    	{
    		throw new TypeError( 'xAjax( info, call, calldata )\n' +
    			'"call" must be function, quitting' );
    		return;
    	}
    	form   = document.createElement( 'form' );
    	if ( typeof info === 'object' )
    	{
    		url    = info.url;
    		method = info.method;
    		try
    		{
    			x = info.data;
    			for ( i = 0; i < x.length; ++i )
    			{
    				txt = '<input id="' + x[ i ][ 0 ] + '" name="' +
    					x[ i ][ 0 ] + '" value="' + x[ i ][ 1 ] + '" />';
    				form.innerHTML += txt;
    			}
    		}
    		catch ( e )
    		{
    			// NO ACTION
    		}
    	}
    	else
    	{
    		url    = info;
    	}
    	form.action = url;
    	form.method = method;
    	form.target = 'xAjax';
    	iframe = document.createElement( 'iframe' );
    	iframe.id   = 'xAjax';
    	iframe.name = 'xAjax';
    	iframe.onload = function ()
    	{
    		try
    		{
    			x = iframe.contentDocument;
    		}
    		catch ( e )
    		{
    			x = iframe.contentWindow.document;
    		}
    		state = x.readyState;
    		call( x.innerText, calldata );
    		body.removeChild( iframe );
    	};
    	iframe.src = 'about:blank';
    	xAttrSet( iframe, 'style', 'display: none' );
    	body = xOne( 'body' );
    	body.appendChild( iframe );
    	form.submit();
    }

  2. #2
    Join Date
    Aug 2010
    Posts
    51
    Never mind, found a way ( even if it is annoying ).
    Code:
    function xOuterML( x )
    {
    	var txt, xs, d = x.documentElement, node, from;
    	if ( d )
    	{
    		x = d;
    	}
    	node = x.cloneNode( true );
    	node.innerHTML = '';
    	xs = new XMLSerializer();
    	txt = xs.serializeToString( node );
    	from = txt.indexOf( 'head>' ) - 1;
    	if ( from > 0 )
    	{
    		txt = txt.slice( 0, from ) + '</' + node.nodeName + '>';
    	}
    	return txt;
    }
    function xDocHTML( x )
    {
    	var node = x.documentElement, tmp = x.doctype, txt = '';
    	if ( tmp )
    	{
    		txt += '<!doctype html';
    		if ( typeof tmp == 'string' )
    		{
    			txt += ' ' + x.doctype;
    		}
    		txt += '>';
    	}
    	txt += '>\n' + xOuterML( node );
    	txt = txt.slice( 0, txt.indexOf( '><' ) ) + '>';
    	txt += node.innerHTML + '</' + node.nodeName + '>';
    	return txt;
    }
    function xCjax( info, call, calldata )
    {
    	var x, url = info.url, method = info.method,
    		body, form, iframe, i, txt;
    	form   = document.createElement( 'form' );
    	if ( typeof info === 'object' )
    	{
    		if ( method.toLowerCase() !== 'post' )
    		{
    			method = 'GET';
    		}
    		else
    		{
    			method = 'POST';
    		}
    		try
    		{
    			x = info.data;
    			for ( i = 0; i < x.length; ++i )
    			{
    				txt = '<input id="' + x[ i ][ 0 ] + '" name="' +
    					x[ i ][ 0 ] + '" value="' + x[ i ][ 1 ] + '" />';
    				form.innerHTML += txt;
    			}
    		}
    		catch ( e )
    		{
    			/* NO ACTION */
    		}
    	}
    	else
    	{
    		url = info;
    	}
    	form.action = url;
    	form.method = method;
    	form.target = 'xAjax';
    	iframe = document.createElement( 'iframe' );
    	iframe.id   = 'xAjax';
    	iframe.name = 'xAjax';
    	iframe.onload = function ()
    	{
    		try
    		{
    			x = iframe.contentDocument;
    		}
    		catch ( e )
    		{
    			x = iframe.contentWindow.document;
    		}
    		if ( x )
    		{
    			if ( x.links.length > 0 )
    			{
    				txt = xDocHTML( x );
    			}
    			else
    			{
    				txt = xOne( 'pre', x );
    				if ( txt )
    				{
    					txt = txt.innerHTML;
    				}
    				else
    				{
    					txt = '';
    				}
    			}
    			call( txt, calldata );
    			xHead.removeChild( iframe );
    		}
    	};
    	xAttrSet( form, 'style', 'display: none' );
    	xAttrSet( iframe, 'style', 'display: none' );
    	xHead.appendChild( form );
    	xHead.appendChild( iframe );
    	form.submit();
    }
    function xCjaxHtml( info, call, calldata )
    {
    	xCjax( info, function ( x, data )
    		{
    			var d;
    			try
    			{
    				d = new DOMParser();
    				d = d.parseFromString( x ,"text/html");
    			}
    			catch ( e )
    			{
    				d = null;
    			}
    			data[ 0 ]( d, data[ 1 ] );
    		}, [ call, calldata ] );
    }

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
HTML5 Development Center



Recent Articles