(function(ext) {
    var name = "";
    var blocks = "";
    var menu = "";
    var script = "";
    var counter = 1;
    var initvar = "";
    
    ext._shutdown = function() {};
    ext._getStatus = function() {
        return {status: 2, msg: 'Ready'};
    };
    
    ext.start = function(extname) {
        name = extname;
        blocks =  "";
        menu =  "";
        script =  "";
    };
    
    ext.block = function(params, js, type, desc) {
        var blocktype = type.charAt(0);
        blocks = blocks + "\[\'" + blocktype + "\'\, \'" + desc + "\'\, \'" + "block" + counter + "\'\]\,";
        script = script + "ext\.block" + counter + " \= function\(" + params + "\) \{" + js + "\}\;";
        counter++;
    };
    
    ext.menu = function(menname, menitem) {
        menu = menu + menname + ": [" + menitem + "],"
    }
    
    ext.init = function(name,value) {
        initvar = initvar + "var " + name + " = \"" + value + "\"\;"
    }
    
    ext.run = function() {
        console.log("Loading Custom Extension " + "\(function\(ext\) \{ext\._shutdown \= function\(\) \{\}; ext\._getStatus \= function\(\) \{return \{status\: 2, msg\: \'Ready\'\};\};" + script + "var descriptor \= \{blocks: \[" + blocks + "\]\, menus\: \{" + menu + "\};ScratchExtensions\.register\(\'" + name + "\'\, descriptor\, ext\)\;\}\)\(\{\}\)\;")
        eval("\(function\(ext\) \{" + initvar + "ext\._shutdown \= function\(\) \{\}; ext\._getStatus \= function\(\) \{return \{status\: 2, msg\: \'Ready\'\};\};" + script + "var descriptor \= \{blocks: \[" + blocks + "\]\, menus\: \{" + menu + "\}\};ScratchExtensions\.register\(\'" + name + "\'\, descriptor\, ext\)\;\}\)\(\{\}\)\;");
    };
    
    ext.jar = function(script) {
        eval(script);
    };
    
    ext.jar2 = function(script) {
        return eval(script);
    };
    
    ext.jar3 = function(script) {
        return eval(script);
    };
    ext.commentget = function() {
        return document.getElementsByName("content")[0].value;
    };
     
    ext.commentset = function(text) {
        document.getElementsByName("content")[0].value = text;
    };
    
    var descriptor = {
        blocks: [
            [" ", "start blockset name %s", "start", "name"],
            [" ", "global var %s value %s", "init", "name", "value"],
            [' ', 'create block: params %s js %s type %m.type desc %s', 'block', "a,b", "return a*b", "r - reporter", "%n * %n"],
            [" ", "create menu name %s items %s", "menu"],
            [" ", "load blockset", "run"],
            [' ', 'eval %s', 'jar', 'true'],
            ['r', 'eval return %s', 'jar2', 'true'],
            ['b', 'eval return %s', 'jar3', 'true'],
            ["r", "comment value", "commentget"],
            [" ", "set comment to %s", "commentset", "comment"],
        ],
        menus: {
            type: ["r - reporter", " - stack", "w - stack that waits", "R - reporter that waits", "e - if/else", "o - clear block", "p - dome", "f - end", "h - hat", "c - loop", "b - booleen"]
        }
    };

    ScratchExtensions.register('Mod - script', descriptor, ext);
})({});

@@ -133,21 +133,42 @@
 r = %22%22;%0A
+    var acturl = %22%22;%0A
     %0A
-
     ext.
@@ -970,32 +970,127 @@
 %22%5C;%22%0A    %7D%0A    %0A
+    ext.urlset = function(url) %7B%0A        acturl = %22url: %5C%22http%5C:%5C/%5C/%22 + url + %22%5C%22%22;%0A    %7D%0A    %0A
     ext.run = fu
@@ -1707,16 +1707,32 @@
 u + %22%5C%7D%5C
+,%22 + acturl + %22%5C
 %7D;Scratc
@@ -2557,24 +2557,24 @@
 %22%25n * %25n%22%5D,%0A
-
             
@@ -2616,24 +2616,94 @@
 %22, %22menu%22%5D,%0A
+            %5B%22 %22, %22info url http://%25s%22, %22urlset%22, %22scratch.mit.edu%22%5D,%0A
             

Update script.js