[主題]元記事の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+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を用いないといけません。