如何将此语法转换为CoffeeScript(js2coffee不起作用)?

时间:2012-08-29 08:57:55

标签: javascript coffeescript

基本上我需要将以下一段JavaScript翻译成CoffeeScript。

location.href = "javascript:(" + function() {
  window.onbeforeunload = function() {
    notifyBackground(collectData());
    return undefined;
  };
} + "){}";

返回“未定义”非常重要,因为如果我将其删除,浏览器会要求用户确认他们是否要离开该页面。

你可能想知道我在做什么。基本上,它是location hack for Firefox extension development

我尝试过以下操作:

location.href = "javascript:(" + ->
  window.onbeforeunload = ->
    notifyBackground(collectData())
    return undefined
+ ")()"

但那变成了:

location.href = "javascript:(" + function() {
  return window.onbeforeunload = function(e) {
    notifyBackground(collectData());
    return void 0;
  };
};
return +")()";

使用js2coffee.org告诉我:

location.href = "javascript:(" + ->
  window.onbeforeunload = ->
    notifyBackground collectData()
    "undefined"
 + "){}"

如果我通过CoffeeScript运行它,我会得到这个JS输出(这是错误的)。

location.href = "javascript:(" + function() {
  return window.onbeforeunload = function() {
    notifyBackground(collectData());
    return "undefined";
  };
};
return +"){}";

2 个答案:

答案 0 :(得分:3)

这足够接近吗?

location.href = "javascript:(#{-> 
  window.onbeforeunload = -> 
    notifyBackground(collectData())
    `undefined`
  return
}){}"

编译为:

location.href = "javascript:(" + (function() {
  window.onbeforeunload = function() {
    notifyBackground(collectData());
    return undefined;
  };
}) + "){}";

注意未定义的反引号以避免使用void 0,以防万一(并且我不确定它是否存在?)

修改

在Chrome控制台中,undefined == void 0true,也许是

`undefined`

可能只是:

undefined

答案 1 :(得分:1)

尝试使用this网站http://js2coffee.org/ js to coffee(和backwards)转换器。