2

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

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

返回“未定义”很重要,因为如果我删除它,浏览器会要求用户确认他们想要离开页面。

你可能想知道我在做什么。基本上,它是用于 Firefox 扩展开发的定位黑客

我尝试过执行以下操作:

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 +"){}";
4

2 回答 2

3

这足够接近吗?

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

编译为:

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

注意 undefined 周围的反引号以避免void 0, 以防万一有所不同(我不确定它是否有效?)

编辑

在 Chrome 控制台undefined == void 0true,所以也许

`undefined`

可能只是:

undefined
于 2012-08-29T09:37:53.290 回答
1

Try this site http://js2coffee.org/ its a js to coffee (and backwards) converter.

于 2012-08-29T08:59:54.710 回答