rlemon
rlemon

Reputation: 17666

"Uncaught SyntaxError: Unexpected token (" but there is no error

I'm authoring a simple userscript that will give the backspace button navigation control like in windows (specifically this is for linux users) for Chromium browser.

This script was working, then I made a few alterations to it (very simple stuff, commenting, tabbing, making it pretty), and now i'm getting this error:

Uncaught SyntaxError: Unexpected token (

on this line

document.head.appendChild(script);

The script is located here - i'm pulling out my hair trying to figure this out.

The script really only applies to chromium as ff gives you a configuration option to enable this functionality.. - Chromium 15.0.874.106 (Developer Build 107270) Ubuntu 11.10

Edit if someone can tell me why this doesn't work that would be great

EmbedCodeOnPage("(function() {" + fn.toString() + "})();"); // fails
EmbedCodeOnPage("(" + fn.toString() + ")()"); // works.

Upvotes: 2

Views: 2810

Answers (3)

Jhenry
Jhenry

Reputation: 151

I had the same problem, even with simple function. This might be due to incorrect syntax of the function definition itself, especially switching between java to javascript.

if i declare function with in an object definition such as calculateTax(){//some logic;} and run, i get "SyntaxError: Unexpected token (" - this is due to the fact that function declaration is not correct format/syntax. The error is misleading, however by changing it to calculateTax : function(){//some logic;} resolves the issue. Hope this helps. Thanks.

Upvotes: 0

Thomas Blobaum
Thomas Blobaum

Reputation: 3730

because you are just dropping in an anonymous function and not executing it

change line 46 and add ()

Upvotes: 1

Wayne
Wayne

Reputation: 60414

I believe the actual error is here:

function EmbedFunctionOnPageAndExecute(fn) {
    EmbedCodeOnPage("(function() {" + fn.toString() + "})();");
}

fn.toString is already going to format your function like this:

function () { /* code here */ }

So you're going to end up with this:

(function() { function () { /* code here */ } })();

This is clearly not what you want. You want to execute the inner function.

Upvotes: 2

Related Questions