WWW備忘録

about XML XSLT FEED(RSS,ATOM) CSS DHTML SEO GoogleMap

XSLTで記述したjavascriptをFirefoxで表示する(10)

2006年01月01日 16時15分00秒 | XSLT
[主題]元記事のXSLを、IEで動作する範囲でいろいろ変えて、Firefoxの動作を見る。
[暫定結論]Firefox+xml+xsl+javascript+document.write()に問題がある。

[テスト方法]
下記の組み合わせでテストを行った。
・javascriptは外部ファイルとし、document.write()を含むものと含まないものを用意した。
・xml+xslと、それと同等の動作をするhtmlを用意した。
・IE6 Firefox1.5をwindows2000上で、Javascript On/OFF を切り替えてテストした。

[テスト結果]
・Firefox+xml+xsl+javascript+document.write()の生み合わせ以外は、
IE Firefoxとも Javascript ON/OFFのいずれでも期待通りの動作をした。
・Firefox+xml+xsl+javascript+document.write()の時は、
  最初のalert文は実行されるが、
  document.write()実行結果が表示されない
  直後のalert文が実行されない
  Javascriptを抜けて、次のxsl上の要素である
      The End が表示された。

[テストソース]
-- script.js --
alert("Javascript Run");
document.write("Javascript works");
alert("Javascript Run2");
--
※赤字の行を追加したり、削除したりしてテストする。

-- rss.xml --
<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet href="rss.xsl" type="text/xsl"?>
<rss version="2.0">
</rss>
--

-- rss.xsl --
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:template match="rss">
        <html xmlns="http://www.w3.org/1999/xhtml">
        <head>
        <title>XML+XSL+JAVASCRIPT TEST</title>
        </head>
        <body>
        <h1><font color="red">XML+XSL+JAVASCRIPT TEST</font></h1>

<script type="text/javascript" src="./script.js"></script>
<noscript>
<p>Javascript <strong>does not </strong>work.</p>
</noscript>
<p>Test End</p>
        </body>
        </html>
    </xsl:template>
</xsl:stylesheet>
--

-- rss.html --
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>HTML+JAVASCRIPT TEST</title>
    </head>
    <body>
        <h1><font color="blue">HTML+JAVASCRIPT TEST</font></h1>
        <script type="text/javascript" src="./script.js"></script>
        <noscript>
            <p>Javascript <strong>does not </strong>work.</p>
        </noscript>
        <p>Test End</p>
    </body>
</html>
--
[追記 2006/1/2]
Firefox+xml+xslでdocument.write()が使えない件についてのレポートを見つけた。

track feed と XHTML の相性
(Firefoxでは)track feed というサービス、簡単に設置できるのに対して、便利さは格別なのですが、書き出しに docment.write を使っているため、 application/xhtml+xml で送出される XHTML の場合は使用できません。

document.write ってXHTMLで動きますか? 動きません
 XMLでは別の方法を使うよう決められているからです。パーサーがマークアップされた文書をパースしている最中に、スクリプトによってマークアップが新たに生成される様なトリックは、使うことが出来ません。XHTMLでも同じ結果を出すことはできますが、要素を増やしたり減らしたりする場合はDOMを用いないといけません。