2010-12-29 55 views
19

私はこのことについてたくさんの投稿を見てきました...しかし、私の人生のために、私の問題は何かを理解することはできません! XSLでXMLを変換しようとすると、Google Chromeは空白のページを表示します。ソースを見ると、生のXMLが表示されます。 IEは動作します。私はこのようなXML文書を持ってGoogle ChromeでXSLが動作しない

...

<?xml version="1.0" encoding="ISO-8859-1"?> 
<?xml-stylesheet type="text/xsl" href="http://localhost/xsl/listXSL.php"?> 
<links> 
    <link id="1" name="Google Home Page" url="http://www.google.com/" clicks="0" /> 
    <link id="2" name="Facebook" url="http://www.facebook.com/" clicks="1" /> 
    <link id="3" name="Gmail" url="http://gmail.com" clicks="2" /> 
</links> 

...とこのようになり、その後リンクXSLファイル...

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:template match="/"> 
    <xsl:for-each select="links/link"> 
    <a> 
     <xsl:attribute name="href"> 
      <xsl:value-of select="@url" /> 
     </xsl:attribute> 
     <xsl:value-of select="@name" /> 
    </a><br /> 
    </xsl:for-each> 
</xsl:template> 
</xsl:stylesheet> 

あなたがいることに気づくかもしれませんXSLファイルは実際にはPHPファイルですが、これは他のブラウザでうまく動作し、Chrome用に.xslに変更しようとしましたが、それは役に立ちません。私はここで間違っていますか?

+2

かを確認することもできます。http://stackoverflow.com/questions/2981524/how-can-i-make-xslt-work-in-chrome – Cumbayah

答えて

14

これが動作しない理由はクロームHTMLファイルができますが、同じディレクトリにローカルXSLTファイルにアクセスするXMLファイルをブロックすることにより、[1][2][3][4]論争の方法で対処していることをセキュリティ上の問題が原因であります同じディレクトリにある.CSSファイルにアクセスしてください。 2008年にChromeチームによって与えられた正当化がthis


は、このシナリオを想像:

  1. あなたは添付ファイルとしてWebページを含む攻撃者からの電子メールメッセージを受け取り、あなたはそれをダウンロードします。

  2. ブラウザでローカルローカルWebページを開きます。

  3. ローカルWebページは、ソースがhttps://mail.google.com/mail/であるものを作成します。

  4. Gmailにログインしているため、フレームは受信トレイにメッセージを読み込みます。

  5. ローカルWebページは、フレームワーク[0] .document.documentElement.innerHTMLにアクセスするためにJavaScriptを使用してフレームの内容を読み取ります。 (インターネットウェブページは、Gmail以外の送信元からのものであるため、この手順を実行することはできません。同じ発信元ポリシーが原因で読み取りが失敗します)。

  6. ローカルウェブページにはあなたの受信トレイをaに入れ、フォームPOSTを介してデータを攻撃者のWebサーバーに送信します。今や攻撃者はあなたの受信箱を持っています。これはスパムや盗難の識別に役立ちます。

この攻撃から自分を守るためにGmailが行うことはできません。

  1. --allow-file-access-from-filesスイッチでChromeを実行してみてください(私はこれを自分でテストしていませんでした)

  2. を:あなたは2つのソリューションを持っている修正プログラムはよう


    私は、それは迷惑なんだ同意しません

    それをホストにアップロードすれば、すべてうまくいくはずです。

+2

を ' - allow-file-from-files 'はこのような状況では効果がないようです。 – kynan

+0

-allow-file-from-filesは問題なく動作しますが、そのスイッチを実行する前にクロムが閉じていることを確認してください。 (もちろん、XSLTには間違いがありません)。 – David

+0

Chromeの決定は愚かです。彼らの[セキュリティ上の懸念](https://code.google.com/p/chromium/issues/detail?id=4197#c14)は理にかなっていますが、XMLファイルはXSLスタイルシートを同じディレクトリから読み込むことができますHTMLファイルは、画像、スタイルシート、およびスクリプトを同じディレクトリから読み込むことができます。 [あなたがスターにすることができる問題](https://code.google.com/p/chromium/issues/detail?id=47416)がありますが、Chrome開発チームは新しいコメントを禁止しています。ユーザがローカルファイルの起源を緩和することをどれほど悪くしているかを定量化することはできません。 –

2

古いバージョンのChromeでは、既知の語彙(HTML、XHTML、SVGなど)で適切なドキュメントを出力しないと、レンダリングされたページが表示されません。

現代版(私は10.0.612.3 devがインストールされています)では、2つ以上のルート要素の結果が原因で、解析エラーが発生するスタイルレスXMLドキュメントを取得します。

解決策:適切な(すべての必須要素を含む)HTML 4.0ドキュメントまたは適切な(適切な名前空間の)XHTML 1.0ドキュメントを出力します。

5

私のためにホストsoves問題へのアップロード。 --allow-file-access-from-filesスイッチの解決策が私には役に立たなかった。

0

--allow-file-from-filesスイッチを使用すると、私のトリックになります。

システムにインストールされているソフトウェアのオフラインドキュメントを使用しようとしていました。 IEはコンテンツを有効にする許可を求めるだけでコンテンツを表示しました。私はセキュリティを犠牲にすることなくこれをクロムに加えることができると言います。

0

javascriptに変数xmlを格納することで、xmlの内容をhtmlに読み込むことができました。

<html> 
<head>testing</head> 

<body> 
<span id="num"></span> <span id="street"></span><br /> <span id="city"></span>, <span id="state"></span> <span id="zip"></span> 

<script> 
txt="<address>"+ 
"<street>Roble Ave</street>"+ 
    "<mtfcc>S1400</mtfcc>"+ 
    "<streetNumber>649</streetNumber>"+ 
    "<lat>37.45127</lat>"+ 
    "<lng>-122.18032</lng>"+ 
    "<distance>0.04</distance>"+ 
    "<postalcode>94025</postalcode>"+ 
    "<placename>Menlo Park</placename>"+ 
    "<adminCode2>081</adminCode2>"+ 
    "<adminName2>San Mateo</adminName2>"+ 
    "<adminCode1>CA</adminCode1>"+ 
    "<adminName1>California</adminName1>"+ 
    "<countryCode>US</countryCode>"+ 
"</address>"; 

if (window.DOMParser) 
    { 
    parser=new DOMParser(); 
    xmlDoc=parser.parseFromString(txt,"text/xml"); 
    } 
else // Internet Explorer 
    { 
    xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); 
    xmlDoc.async=false; 
    xmlDoc.loadXML(txt); 
    } 
document.getElementById("num").innerHTML= 
xmlDoc.getElementsByTagName("streetNumber")[0].childNodes[0].nodeValue; 
document.getElementById("street").innerHTML= 
xmlDoc.getElementsByTagName("street")[0].childNodes[0].nodeValue; 
document.getElementById("city").innerHTML= 
xmlDoc.getElementsByTagName("adminName2")[0].childNodes[0].nodeValue; 
document.getElementById("state").innerHTML= 
xmlDoc.getElementsByTagName("adminCode1")[0].childNodes[0].nodeValue; 
document.getElementById("zip").innerHTML= 
xmlDoc.getElementsByTagName("postalcode")[0].childNodes[0].nodeValue; 
</script> 
</body> 
</html> 

screenshot this answer helped me

関連する問題