基本上,我需要将以下JavaScript转换为CoffeeScript。

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


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

您可能想知道我正在做的wtf。基本上是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 +"){}";

最佳答案

这个够近了吗?

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

关于javascript - 如何将此语法转换为CoffeeScript(js2coffee不起作用)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12174208/

10-13 09:27