Problem: Setting MSIE iframe innerHTML change relative href/src to absolute href/src

S

Soren Vejrum

I am working on a web-based html editor using MSIE's designmode and
iframes.

Everything works just fine, but MSIE changes all my relative "a href"
and "img src" links (i.e. "/index.asp") to absolute links (i.e.
"http://localhost/index.asp") when I set the iframe's innerHTML.

This is bad as the links are supposed to be relative. How can I avoid
this? Any solutions/suggestions are much appreciated.

- This (setting the innerHTML) works just fine in Mozilla/Netscape.

- I have tried to create a selection/range and use "pasteHTML" instead
but the result is the same.

- I have tried to set the "html head base href" in the initial
document loaded by the iframe but the result is the same.


Example:

myiframe.contentWindow.document.body.innerHTML = '<a
href="/index.asp">xxx</a>';
alert(myiframe.contentWindow.document.body.innerHTML);

Output:

<a href="http://localhost/index.asp">xxx</a>
 
E

Evertjan.

Soren Vejrum wrote on 05 jul 2003 in microsoft.public.scripting.jscript:
I am working on a web-based html editor using MSIE's designmode and
iframes.

Everything works just fine, but MSIE changes all my relative "a href"
and "img src" links (i.e. "/index.asp") to absolute links (i.e.
"http://localhost/index.asp") when I set the iframe's innerHTML.

This is bad as the links are supposed to be relative. How can I avoid
this? Any solutions/suggestions are much appreciated.

- This (setting the innerHTML) works just fine in Mozilla/Netscape.

- I have tried to create a selection/range and use "pasteHTML" instead
but the result is the same.

- I have tried to set the "html head base href" in the initial
document loaded by the iframe but the result is the same.


Example:

myiframe.contentWindow.document.body.innerHTML = '<a
href="/index.asp">xxx</a>';
alert(myiframe.contentWindow.document.body.innerHTML);

Output:

<a href="http://localhost/index.asp">xxx</a>

You have a iframe that is not filled by an html file, but by innerHTML.

Such "file" has no location so it cannot have relative links !!!

So either it makes it's own absolute links or it does not wort.
 
E

Evertjan.

Soren Vejrum wrote on 05 jul 2003 in comp.lang.javascript:
Thanks, but the iframe is actually created in an html file with a
dummy html file (with html, head, title, style sheet and body tags)
loaded for the iframe before I try to replace the innerHTML.

In the meantime I have found a "hack" to circumvent this "error". I
can replace the iframe body content through "write":

myiframe.contentWindow.document.write('<a
href="/index.asp">xxx</a>');

However, I think this is ugly and would prefer to do this through the
DOM if at all possible.

First who will see the "uglyness" ?

Could you have javascript in the iframe file FETCH the value from the
parent instead of having the parent sending it to the file ?
 
L

Lasse Reichstein Nielsen

Soren Vejrum said:
In the meantime I have found a "hack" to circumvent this "error". I can
replace the iframe body content through "write":

myiframe.contentWindow.document.write('<a href="/index.asp">xxx</a>');

However, I think this is ugly and would prefer to do this through the DOM if
at all possible.

It is (almost) DOM.

The "write" method of the HTMLDocument interface is part of DOM 2 HTML
(except that the DOM expects the document stream to have been openend
by the "open" function first).

The "contentWindow" property is not DOM 2, but the "contentDocument"
property is, and is understood by Mozilla and Opera (but not IE, ofcourse).
The "contentWindow" property is understood by Mozilla and IE, but should
be equivalent to "frames['iframeName']" anyway.

/L
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,731
Messages
2,569,432
Members
44,832
Latest member
GlennSmall

Latest Threads

Top