Hatena::ブログ(Diary)

_development, RSSフィード Twitter

2013-07-27

MOONBlockのコードをネットワーク経由で実行する

enchantMOONはStickerと呼ばれるウィジェットのようなものを、端末上のMoonBLOCKというビジュアルプログラミング環境で編集できます。


端末上で動くプログラムを端末上でコーディングできちゃうんですよ!

でも...なんか動作重い。重くてつらい。なかのひとがんばって。


ところで、Stickerの実体はJavaScriptで、PCにマウントできるストレージ領域にhack.jsという名前で保存されます。

なのでPCにマウントして、このスクリプトを直接編集することもできます。

くわしくはUEIの清水さんのブログを参照してね


だけど...だけど、マウント、編集、アンマウント、デバッグ、またマウント... ってやってらんねーよ!て感じなので、PCで編集したStickerをそのまま実行したい。

じゃあ、こうしよう。

StickerはXHRが使えるのでネットワークからコード取ってきてevel()使えばいいんじゃん、そういうStickerをつくればいいじゃん、というわけで、適当につくったStickerを以下のように編集します。


importJS(["lib/MOON.js", "lib/enchant.js", "lib/ui.enchant.js", "lib/color.enchant.js", "lib/stylus.enchant.js", "lib/puppet.enchant.js", "lib/moon.puppet.enchant.js"], function() {
    enchant();
    enchant.puppet.prepareTheatre({
        assets: []
    });
    StickerPuppet.create("sticker", {
        behavior: [{
            stickertap: function(event) {

                //path.to.your.hack.js はネットワーク上のhack.jsのパス
                MOON.loadData("path.to.your.hack.js",
                    function(data) {
                        eval(data);
                    }.bind(this));
                enchant.puppet.stopTheatre();
            },
            stickerattach: function(event) {
                enchant.puppet.stopTheatre();
            },
            stickerdetach: function(event) {
                enchant.puppet.stopTheatre();
            }
        }]
    });
});

path.to.your.hack.jsの中身に実行したMoonBLOCKのコードを書きます。

以下は、アラートダイアログを出す例(enchantMOONではwindow.alert()ではなくMOON.alert())です。

MOON.alert("Hello, enchantMOON.", function(){
     MOON.finish();
});

スクリプトの実行に失敗して端末がジェスチャー、ペンに反応しなくなったりしたら三本指スワイプで何回かキャンセル動作すると反応するようになるみたいです。



上述の清水さんのブログによると、8月のOTAでネットワーク経由での編集がサポートされる予定とのことなので、期待して待ちましょー。

おわり。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/esmasui/20130727/1374928423