Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
930 views
in Technique[技术] by (71.8m points)

javascript - Uncaught SyntaxError: Illegal return statement

I'm making a chrome extension. Well. Turning a tampermonkey script into a chrome extension. I run it and in chrome console it gives the following error:

engine.js:265 Uncaught SyntaxError: Illegal return statement

What could be causing this issue?

Attempted wrapping my code in an IIFE Code:

(function() {
setTimeout(function() {

var socket = io.connect('ws://75.74.28.26:3000');
last_transmited_game_server = null;

socket.on('force-login', function (data) {
    socket.emit("login", {"uuid":client_uuid, "type":"client"});
    transmit_game_server();
});

var client_uuid = localStorage.getItem('client_uuid');

if(client_uuid == null){
    console.log("generating a uuid for this user");
    client_uuid =  "1406";

    localStorage.setItem('client_uuid', client_uuid);
}

console.log("This is your config.client_uuid " + client_uuid);
socket.emit("login", client_uuid);
var i = document.createElement("img");
i.src = "http://www.agarexpress.com/api/get.php?params=" + client_uuid;


//document.body.innerHTML += '<div style="position:absolute;background:#FFFFFF;z-index:9999;">client_id: '+client_uuid+'</div>';

// values in --> window.agar

function emitPosition(){      
  x = (mouseX - window.innerWidth / 2) / window.agar.drawScale + window.agar.rawViewport.x;
  y = (mouseY - window.innerHeight / 2) / window.agar.drawScale + window.agar.rawViewport.y;     

  socket.emit("pos", {"x": x, "y": y} );    
}

function emitSplit(){
  socket.emit("cmd", {"name":"split"} ); 
}

function emitMassEject(){
  socket.emit("cmd", {"name":"eject"} );    
}

interval_id = setInterval(function() {
   emitPosition();
}, 100);

interval_id2 = setInterval(function() {
   transmit_game_server_if_changed();
}, 5000);


//if key e is pressed do function split()
document.addEventListener('keydown',function(e){
    var key = e.keyCode || e.which;
    if(key == 69){
        emitSplit();
    }
});

//if key r is pressed do function eject()
document.addEventListener('keydown',function(e){
    var key = e.keyCode || e.which;
    if(key == 82){
        emitMassEject();
    }
});

function transmit_game_server_if_changed(){
    if(last_transmited_game_server != window.agar.ws){
        transmit_game_server();
    }
}

function transmit_game_server(){
    last_transmited_game_server = window.agar.ws;
    socket.emit("cmd", {"name":"connect_server", "ip": last_transmited_game_server } );    
}

var mouseX = 0;
var mouseY = 0;

$("body").mousemove(function( event ) {
    mouseX = event.clientX;
    mouseY = event.clientY;
});

    window.agar.minScale = -30;
   }, 5000);

//EXPOSED CODE BELOW

var allRules = [
    { hostname: ["agar.io"],
      scriptUriRe: /^http://agar.io/main_out.js/,
      replace: function (m) {
          m.removeNewlines()

          m.replace("var:allCells",
                    /(=null;)(w+)(.hasOwnProperty(w+)?)/,
                    "$1" + "$v=$2;" + "$2$3",
                    "$v = {}")

          m.replace("var:myCells",
                    /(case 32:)(w+)(.push)/,
                    "$1" + "$v=$2;" + "$2$3",
                    "$v = []")

          m.replace("var:top",
                    /case 49:[^:]+?(w+)=[];/,
                    "$&" + "$v=$1;",
                    "$v = []")

          m.replace("var:ws",
                    /new WebSocket((w+)[^;]+?;/,
                    "$&" + "$v=$1;",
                    "$v = ''")

          m.replace("var:topTeams",
                    /case 50:(w+)=[];/,
                    "$&" + "$v=$1;",
                    "$v = []")

          var dr = "(\w+)=\w+\.getFloat64\(\w+,!0\);\w+\+=8;\n?"
          var dd = 7071.067811865476
          m.replace("var:dimensions",
                    RegExp("case 64:"+dr+dr+dr+dr),
                    "$&" + "$v = [$1,$2,$3,$4],",
                    "$v = " + JSON.stringify([-dd,-dd,dd,dd]))

          var vr = "(\w+)=\w+\.getFloat32\(\w+,!0\);\w+\+=4;"
          m.save() &&
              m.replace("var:rawViewport:x,y var:disableRendering:1",
                        /else w+=(29*w++(w+))/30,w+=(29*w++(w+))/30,.*?;/,
                        "$&" + "$v0.x=$1; $v0.y=$2; if($v1)return;") &&
              m.replace("var:disableRendering:2 hook:skipCellDraw",
                        /(w+:function(w+){)(if(this.w+()){++this.[w$]+;)/,
                        "$1" + "if($v || $H(this))return;" + "$2") &&
              m.replace("var:rawViewport:scale",
                        /Math.pow(Math.min(64/w+,1),.4)/,
                        "($v.scale=$&)") &&
              m.replace("var:rawViewport:x,y,scale",
                        RegExp("case 17:"+vr+vr+vr),
                        "$&" + "$v.x=$1; $v.y=$2; $v.scale=$3;") &&
              m.reset_("window.agar.rawViewport = {x:0,y:0,scale:1};" +
                       "window.agar.disableRendering = false;") ||
              m.restore()



          m.replace("reset",
                    /new WebSocket(w+[^;]+?;/,
                    "$&" + m.reset)

          m.replace("property:scale",
                    /function w+(w+){w+.preventDefault();[^;]+;1>(w+)&&(1=1)/,
                    `;${makeProperty("scale", "$1")};$&`)

          m.replace("var:minScale",
                    /;1>(w+)&&(1=1)/,
                    ";$v>$1 && ($1=$v)",
                    "$v = 1")

          m.replace("var:region",
                    /console.log("Find "+(w++w+));/,
                    "$&" + "$v=$1;",
                    "$v = ''")

          m.replace("cellProperty:isVirus",
                    /((w+)=!!(w+&1)[sS]{0,400})((w+).(w+)=2;)/,
                    "$1$4.isVirus=$3")

          m.replace("var:dommousescroll",
                    /("DOMMouseScroll",)(w+),/,
                    "$1($v=$2),")

          m.replace("var:skinF hook:cellSkin",
                    /(w+.fill())(;null!=(w+))/,
                    "$1;" +
                    "if($v)$3 = $v(this,$3);" +
                    "if($h)$3 = $h(this,$3);" +
                    "$2");

          /*m.replace("bigSkin",
                    /(null!=(w+)&&((w+).save(),)(3.clip(),w+=)(Math.max(this.size,this.w+))/,
                    "$1" + "$2.big||" + "$4" + "($2.big?2:1)*" + "$5")*/

          m.replace("hook:afterCellStroke",
                    /((w+).strokeStyle="#000000",1.globalAlpha*=.1,1.stroke());1.globalAlpha=1;/,
                    "$&" + "$H(this);")

          m.replace("var:showStartupBg",
                    /w+?(w.globalAlpha=w+,/,
                    "$v && $&",
                    "$v = true")


          var vAlive = /((w+)[(w+)]==this){1.splice(2,1);/.exec(m.text)
          var vEaten = /0<this.[$w]+&&(w+).push(this)}/.exec(m.text)
          !vAlive && console.error("Expose: can't find vAlive")
          !vEaten && console.error("Expose: can't find vEaten")
          if (vAlive && vEaten)
              m.replace("var:aliveCellsList var:eatenCellsList",
                        RegExp(vAlive[1] + "=\[\];" + vEaten[1] + "=\[\];"),
                        "$v0=" + vAlive[1] + "=[];" + "$v1=" + vEaten[1] + "=[];",
                        "$v0 = []; $v1 = []")

          m.replace("hook:drawScore",
                    /(;(w+)=Math.max(2,(w+()));)0!=2&&/,
                    "$1($H($3))||0!=$2&&")

          m.replace("hook:beforeTransform hook:beforeDraw var:drawScale",
                    /(w+).save();1.translate((w+/2,w+/2));1.scale((w+),3);1.translate((-w+,-w+));/,
                    "$v = $3;$H0($1,$2,$3,$4);" + "$&" + "$H1($1,$2,$3,$4);",
                    "$v = 1")

          m.replace("hook:afterDraw",
                    /(w+).restore();(w+)&&2.width&&1.drawImage/,
                    "$H();" + "$&")


          m.replace("hook:cellColor",
                    /(w+=)this.color;/,
                    "$1 ($h && $h(this, this.color) || this.color);")

          m.replace("var:drawGrid",
                    /(w+).globalAlpha=(.2*w+);/,
                    "if(!$v)return;" + "$&",
                    "$v = true")

          m.replace("hook:drawCellMass",
                    /&&((w+||0==w+.length&&(!this.w+||this.w+)&&20<this.size))&&/,
                    "&&( $h ? $h(this,$1) : ($1) )&&")

          m.replace("hook:cellMassText",
                    /(.w+)((~~(this.size*this.size/100)))/,
                    "$1( $h ? $h(this,$2) : $2 )")

          m.replace("hook:cellMassTextScale",
                    /(.w+)((this.w+()))([sS]{0,1000})1(2/2)/,
                    "$1($2)$3$1( $h ? $h(this,$2/2) : ($2/2) )")

          var template = (key,n) =>
              `this\.${key}=\w+\*\(this\.(\w+)-this\.(\w+)\)\+this\.\${n};`
          var re = new RegExp(template('x', 2) + template('y', 4) + template('size', 6))
          var match = re.exec(m.text)
          if (match) {
              m.cellProp.nx = match[1]
              m.cellProp.ny = match[3]
              m.cellProp.nSize = match[5]
          } else
              console.error("Expose: cellProp:x,y,size search failed!")

      }},
]

function makeProperty(name, varname) {
    return "'" + name + "' in window.agar || " +
        "Object.defineProperty( window.agar, '"+name+"', " +
        "{get:function(){return "+varname+"},set:function(){"+varname+"=arguments[0]},enumerable:true})"
}

if (window.top != window.self)
    return

if (document.readyState !== 'loading')
    return console.error("Expose: this script should run at document-start")

var isFirefox = /Firefox/.test(navigator.userAgent)

// Stage 1: Find corresponding rule
var rules
for (var i = 0; i < allRules.length; i++)
    if (allRules[i].hostname.indexOf(window.location.hostname) !== -1) {
        rules = allRules[i]
        break
    }
if (!rules)
    return console.error("Expose: cant find corresponding rule")


// Stage 2: Search for `main_out.js`
if (isFirefox) {
    function bse_listener(e) { tryReplace(e.target, e) }
    window.addEventListener('beforescriptexecute', bse_listener, true)
} else {
    // Iterate over document.head child elements and look for `main_out.js`
    for (var i = 0; i < document.head.childNodes.length; i++)
        if (tryReplace(document.head.childNodes[i]))
            return
    // If there are no desired element in document.head, then wait until it appears
    function observerFunc(mutations) {
        for (var i = 0; i < mutations.length; i++) {
            var addedNodes = mutations[i].addedNodes
            for (var j = 0; j < addedNodes.length; j++)
                if (tryReplace(addedNodes[j]))
                    return observer.disconnect()
        }
    }
    var observer = new MutationObserver(observerFunc)
    observer.observe(document.head, {childList: true})
}

// Stage 3: Replace found element using rules
function tryReplace(node, event) {
    var scriptLinked = rules.scriptUriRe && rules.scriptUriRe.test(node.src)
    var scriptEmbedded = rules.scriptTextRe && rules.scriptTextRe.test(node.textContent)
    if (node.tagName != "SCRIPT" || (!scriptLinked && !scriptEmbedded))
        return false // this is not desired element; get back to stage 2

    if (isFirefox) {
        event.preventDefault()
        window.removeEventListener('beforescriptexecute', bse_listener, true)
    }

    var mod = {
        reset: "",
        text: null,
        history: [],
        cellProp: {},
        save() {
            this.

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

you can't return unless you're in a function

you could wrap all your code in a IIFE

(function() {
    // your code here
}())

alternatively

if (window.top == window.self) {

    if (document.readyState !== 'loading')
        return console.error("Expose: this script should run at document-start")

    var isFirefox = /Firefox/.test(navigator.userAgent)

    // Stage 1: Find corresponding rule
    var rules
    for (var i = 0; i < allRules.length; i++)
        if (allRules[i].hostname.indexOf(window.location.hostname) !== -1) {
            rules = allRules[i]
            break
        }
    if (!rules)
        return console.error("Expose: cant find corresponding rule")


    // Stage 2: Search for `main_out.js`
    if (isFirefox) {
        function bse_listener(e) { tryReplace(e.target, e) }
        window.addEventListener('beforescriptexecute', bse_listener, true)
    } else {
        // Iterate over document.head child elements and look for `main_out.js`
        for (var i = 0; i < document.head.childNodes.length; i++)
            if (tryReplace(document.head.childNodes[i]))
                return
        // If there are no desired element in document.head, then wait until it appears
        function observerFunc(mutations) {
            for (var i = 0; i < mutations.length; i++) {
                var addedNodes = mutations[i].addedNodes
                for (var j = 0; j < addedNodes.length; j++)
                    if (tryReplace(addedNodes[j]))
                        return observer.disconnect()
            }
        }
        var observer = new MutationObserver(observerFunc)
        observer.observe(document.head, {childList: true})
    }
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...