【问题标题】:"Uncaught SyntaxError: Unexpected token (" but there is no error"Uncaught SyntaxError: Unexpected token (" 但没有错误
【发布时间】:2011-12-13 00:01:27
【问题描述】:

我正在编写一个简单的用户脚本,它将为 Chromium 浏览器提供退格按钮导航控制,就像在 Windows(特别是针对 linux 用户)中一样。

这个脚本工作的,然后我对它做了一些改动(非常简单的东西,评论,标签,让它漂亮),现在我收到了这个错误:

Uncaught SyntaxError: Unexpected token (

在这条线上

document.head.appendChild(script);

脚本位于here - 我正在拔头发试图弄清楚这一点。

该脚本实际上仅适用于 chromium,因为 ff 为您提供了启用此功能的配置选项。 - Chromium 15.0.874.106(开发者内部版本 107270)Ubuntu 11.10

编辑 如果有人能告诉我为什么这不起作用,那就太好了

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

【问题讨论】:

  • 可能问题出在注入的脚本代码中。
  • Firebug 在这里给出不同的错误:jsfiddle.net/RWtTx,主要是function statement requires a name (function() {function () {
  • 为什么不像var headtag = document.getElementsByTagName('head')[0]那样存储头部,然后做headtag.appendChild(script)
  • 这有点像货物崇拜,但我也会尝试在你的“包装”前面(在它的 open-paren 之前)贴一个分号。
  • 哦,我在看到你的编辑之前就回答了。希望对您有所帮助。

标签: javascript chromium userscripts


【解决方案1】:

我相信实际的错误在这里:

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

fn.toString 已经准备像这样格式化你的函数:

function () { /* code here */ }

所以你最终会得到这个:

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

这显然不是你想要的。你想执行内部函数。

【讨论】:

  • +1 以获得更好的答案解释。然而,Thomas 在聊天室中得出了相同的结论 :) 谢谢。
【解决方案2】:

因为你只是加入了一个匿名函数而不是执行它

更改第 46 行并添加 ()

【讨论】:

  • 这绝对不是他们想要做的。
【解决方案3】:

我遇到了同样的问题,即使是简单的功能。这可能是由于函数定义本身的语法不正确,尤其是在 java 和 javascript 之间切换。

如果我在对象定义中声明函数,例如 calculateTax(){//some logic;} 并运行,我得到“SyntaxError: Unexpected token (” - 这是因为函数声明格式不正确/syntax。该错误具有误导性,但是通过将其更改为 calculateTax : function(){//some logic;} 解决了这个问题。希望这会有所帮助。谢谢。

【讨论】:

    猜你喜欢
    • 2015-04-21
    • 2014-04-07
    • 1970-01-01
    • 1970-01-01
    • 2012-05-17
    • 2019-02-10
    • 2014-07-08
    • 2011-03-09
    • 2014-01-06
    相关资源
    最近更新 更多