そのはてなダイアリーで、こうすれば比較的安全に実行可能なJavaScriptを記述できるのではないかという提案。

404 Blog Not Found:javascript - はてダでは書けないはてなブックマーク技25個
こういう技の紹介って、JSがあればもっとわかりやすいんだけどはてダはJS禁なので。

レシピ

  1. まずは、スーパーpre記法を以下のように拡張。
    >|javascript|
    alert(Math.atan2(1,1)*4);
    |executable|<
    

    このexecutableはrunnableでもevaluableでも構わない。

  2. これを、以下のようなHTMLに展開。

    <!-- ここまでは今までと同様 -->
    <pre class="syntax-highlight"><span class="synStatement">alert</span>(Math.atan2(1,1)*4)
    </pre>
    <!-- ここから新規 -->
    <textarea style="display:none">
    (function(){
    alert(Math.atan2(1,1)*4);
    })()
    </textarea><input type="submit" value="実行"
     onclick="try{eval(this.previousSibling.value)}catch(e){alert(e)}">
    </div>
    
  3. 以下のように表示される。もちろん実行可能。
    alert(Math.atan2(1,1)*4);
    

ポイント

  • 記法中のjavascriptを、(function(){/* ... */})()でくるむことで、変数衝突を回避
  • <textarea style="display:none">に、実行用のscriptをas isで格納しておける
  • その直後にinputタグをおき、onclickでeval(this.previousSibling.value)することで、投稿されたScriptを実行。この部分は、factor outしてももちろん構わない。

はてダにはid:amachangをはじめ、日本を代表するJavaScriptersがいるのに、現状はなんとも勿体ない。<script>モロタグを禁止するのは仕方ないにしても、上記の方法で実行可能なSnippetsぐらい投稿可能にしてもいいのではないだろうか。

Dan the Occasional Hatena::Bookmarker