Hatena::Groupjavascript

JavaScriptで遊ぶよ

 | 

2009-10-10

HTMLJS

17:29

はてなの仕様で、スーパーpre記法中の <!-- --> が生成 HTML から完全に消されるっぽいです。なぜか http://javascript.g.hatena.ne.jp/edvakf/20091010 だとちゃんと出力されます。id:os0x さん、ご指摘ありがとうございます。

ちょっとおもしろかったネタ。

  • self.html
<!--
/* -->
<!DOCTYPE html>
<script src=""></script>
<!-- */
document.write('works!');
// -->

↑と同じもの↓

<!--
/* -->
<!DOCTYPE html>
<script src=""></script>
<!-- */
document.write('works!');
// -->

Firefox/Safari/Chromium ではちゃんと works! と表示される。(Opera は無理。あとで報告しとこう。Opera でも file: URL じゃなければ実行されるっぽい。)

<!-- は JavaScript では // と同じ意味になるらしい。

id:javascripter さんがデモを作ってくれた


これが何の役に立つかというと、常に同一ドメインの外部ファイルを必要とする Web Workers だけど、このように1ファイルで完結させることができるらしい。

     <!--
     postMessage('works!');
     /*
     -->
     <!doctype html>
     <script>
     // The empty string should work too, per spec, AFAICT, but
     // Firefox and Chrome throw an exception for the empty string
     var worker = new Worker('?');
     worker.onmessage = function(e) { alert(e.data) }
     </script>
     <!--
     */
     //-->
http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2009-September/023138.html

こっちのほうがいいかも、的な。

    <!--
    onmessage = function(e) { eval(e.data); }
    /*
    -->
    <!DOCTYPE html>
    <script type=text/x-worker id=worker>
    ...script to evaluate...
    </script>
    <script>
    str = document.getElementById('worker').text;
    w = new Worker("");
    w.postMessage(str);
    </script>
    <!--
    */
    //-->
http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2009-September/023195.html

この筆者の論点は、こういうバッドノウハウが広まってしまうと困るので、ちゃんとした方法で同一ファイル内に Worker スクリプトを書けるようにしてはどうか、という話なのだけど、あまり反応は無いみたい。

data:URI を許容するようにしては、とか言ってるけど、それはあんまりだと思う。

hasegawayosukehasegawayosuke2009/10/19 18:40Firefoxだと <html><title>{alert('js')}</title></html> とか。

edvakfedvakf2009/10/20 00:08理解力が無くてすいません。
その HTML を開くと実行されるのでしょうか。試してみた限りでは実行されませんでした。file:URL だからかな。

hoshikuzuhoshikuzu2009/11/11 15:47E4Xのことかもしれませんね。 <hasegawayosukeさんのコード

edvakfedvakf2009/11/11 16:25> hoshikuzu さん
「hoshikuzu | star_dust の書斎」の hoshikuzu さんですよね。いつもブログを拝見しています。
E4X の書式で { } 内は JavaScript になるんですね。
<html><title>{alert('js')}</title></html><script src="?"></script>
こういうことなのかな、と思いましたがこれも実行されず。何か僕が誤解をしているのでしょうか…

hasegawayosukehasegawayosuke2009/11/13 16:30おっしゃる通り、E4Xです。
<html><title>{alert('js')}</title></html><script src="?"></script> は <html> が閉じてしまってるからのような。
手元では <html><head><title>{alert('js')}</title><script src="#"></script></head></html> で、file:// でも動いてますね。

edvakfedvakf2009/11/14 00:24<html> が閉じてるのは関係ないと思います。例えば http://reader.livedoor.com/reader/ とか。

Firefox のエラーを見たら

Error: XML cannot be the whole program
Source File: http://localhost/~atsushi/junk/selfscript.html#
Line: 2, Column: 79
Source Code:
<html><head><title>{alert('js')}</title><script src="#"></script></head></html>

となっていました。file: でも http: でも同じですね。設定の問題かな。

hasegawayosukehasegawayosuke2010/02/04 09:23調べました。Firefox 3.5以降では、http で script src として外部リソースを読み込んだときに、それの中身がXMLリテラルだけのばあいには "Error: XML cannot be the whole program" になるようです。https://bugzilla.mozilla.org/show_bug.cgi?id=375250

トラックバック - http://javascript.g.hatena.ne.jp/edvakf/20091010
 |