On Nov 2, 2010, at 12:37 AM, Nathan Nobbe wrote:

On Mon, Nov 1, 2010 at 11:22 PM, Karl DeSaulniers <k...@designdrumm.com> wrote: I need to basically grab the source of the page as text. Then I can do a replace() on the <link> tag. Then insert the text into an Iframe. In theory, this I thought would be handled better server side. Is this possible?

yes, there are a few options, fopen wrappers, curl or raw sockets all come to mind. fopen wrappers sound like they may be easiest for you.

Any examples or urls to make a fopen wrapper? Or is there a simple function for getting the source text from a URL? Thats all I really need, if I can get <html>...</html> in text, I'm good! From that point I can insert the text into a hidden form field and grab the text via javascript if need be (but very hackish) or with php. I think that may be a solution, if I assign an include statement or echo of the url inside a hidden form field. A hidden form field will force the text to be saved and not parsed. I think.


I think the problem I'm having is that the domain I'm requesting from is not the same domain as mine so their may be some security issue.

right, this is why you would setup a server side proxy, to avoid client side cross domain security restrictions, however you'll have to change all the instances of the remote domain to your domain, and ensure that your server actually is able to fulfill requests for those resources.

Server side proxy.. I have heard of this, but do not know exactly what a proxy does to know if it would be a solution. I also have not seen one in action nor made one (that I know of), any beginner tuts you can lend?


I also thought about injecting a link tag into the iframe at the same time I load the HTML.

when you say link tag are you talking about <a> tags? you lost me on this last line here.

IE:  [code]
Get the text from their source, something like:

$htmlTextresult = <html>
<head>
<link href="css/fromtheirsite.css" rel="stylesheet" type="text/css" media="all" />
</head>
<body>
... their content
</body>
</html>

then do a string replace on the link tag..
$newTextresult = str_replace($htmlTextresult, '<link href="css/ fromtheirsite.css" rel="stylesheet" type="text/css" media="all" />', '<link href="css/frommysite.css" rel="stylesheet" type="text/css" media="all" />');
or
$newTextresult = str_replace($htmlTextresult, 'css/ fromtheirsite.css', 'css/frommysite.css');

insert new text into the iframe..
$newTextresult = <html>
<head>
<link href="css/frommysite.css" rel="stylesheet" type="text/css" media="all" />
</head>
<body>
... their content/ my style :)
</body>
</html>

Or is there a way to strip the text that is in the <head> , <body> and <script> tags?
I could then insert those into a blank html file?


Browsers load the last style sheet on top of others.

this is true, but i doubt you'll be able to have it load a css file from your domain atop a css file from a remote domain.

Well contrary, I think, only because all css tuts I found warned about using the "!important" in your css as it would override an external css. Imported css has the least priority out of all and their css is imported, maybe if I wrote the css as a <style> inline within the text I received from the source? I know that would work as far as my css beating out theirs. And the idea is to get the source and replace the text that points to their css (the <link> tag) with mine before its parsed.


If I could just get the link tag into the iframes contents right after I get the source text in there, it may work. But there is also the issue of correctly assigning the classes and I'd that are used in the iframe. Like

iframe.holder .someclassusedbythem {}

Or do I do?

iframe#holder .someclassusedbythem {}

Or

#holder .someclassusedbythem {}

Sorry if I'm OT with that.

shrug, no worries, but im too lazy to dig into the details of client side options. :)

Hey thanks for your help Nathan. I was starting to think I needed to scrap.
You have sparked the curiosity again.

Best,


-nathan



Karl DeSaulniers
Design Drumm
http://designdrumm.com

Reply via email to