I have an XML document here that is served with a corresponding XSL file. The transformation is left to be executed client-side, without JavaScript.
This works fine in IE (shock horror), but in Google Chrome, just displays the document's text nodes.
I know that it is possible to do client-side XSL in Chrome, as I have seen examples of it, but I am yet to be able to replicate this success myself
What am I doing wrong?
The problem based on Chrome is not about the xml namespace which is
xmlns="http://www.w3.org/1999/xhtml"
. Without the namesspace attribute, it won't work with IE either.Because of the security restriction, you have to add the
--allow-file-access-from-files
flag when you start the chrome. I think linux/*nix users can do that easily via the terminal but for windows users, you have to open the properties of the Chrome shortcut and add it in the target destination as below;Right-Click -> Properties -> Target
Here is a sample full path with the flags which I use on my machine;
I hope showing this step-by-step will help windows users for the problem, this is why I've added this post.
I tried putting the file in the wwwroot. So when accessing the page in Chrome, this is the address localhost/yourpage.xml.
As close as I can tell, Chrome is looking for the header
Content-Type: text/xml
Then it works --- other iterations have failed.
Make sure your web server is providing this. It also explains why it fails for file://URI xml files.
At the time of writing, there was a bug in chrome which required an
xmlns
attribute in order to trigger rendering:This was the problem I was running into when serving the xml file from a server.
If unlike me, you are viewing the xml file from a
file:///
url, then the solutions mentioning--allow-file-access-from-files
are the ones you wantThe other answer below by Eric is wrong. The namespace declaration he mentioned had nothing to do with the problem.
The real reason it doesn't work is due to security concerns (cf. issue 4197, issue 111905).
Imagine this scenario:
You receive an email message from an attacker containing a web page as an attachment, which you download.
You open the now-local web page in your browser.
The local web page creates an
<iframe>
whose source is https://mail.google.com/mail/.Because you are logged in to Gmail, the frame loads the messages in your inbox.
The local web page reads the contents of the frame by using JavaScript to access
frames[0].document.documentElement.innerHTML
. (An online web page would not be able to perform this step because it would come from a non-Gmail origin; the same-origin policy would cause the read to fail.)The local web page places the contents of your inbox into a
<textarea>
and submits the data via a form POST to the attacker's web server. Now the attacker has your inbox, which may be useful for spamming or identify theft.Chrome foils the above scenario by putting restrictions on local files opened using Chrome. To overcome these restrictions, we've got two solutions:
Try running Chrome with the
--allow-file-access-from-files
flag. I've not tested this myself, but if it works, your system will now also be vulnerable to scenarios of the kind mentioned above.Upload it to a host, and problem solved.
Check http://www.aranedabienesraices.com.ar
This site is built with XML/XSLT client-side. It works on IE6-7-8, FF, O, Safari and Chrome. Are you sending HTTP headers correctly? Are you respecting the same-origin policy?