2

基本的に、次のJavaScriptをCoffeeScriptに翻訳する必要があります。

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

「未定義」を返すことは重要です。なぜなら、私がページを削除した場合、ブラウザはユーザーにページを離れたいかどうかを確認するように求めるからです。

あなたは私がやっているwtfを不思議に思うかもしれません。基本的に、これは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;
  };
}) + "){}";

違いが生じる場合に備えて、未定義の周りのバッククォートに注意してくださいvoid 0(違いがあるかどうかはわかりませんか?)

編集

Chromeコンソールundefined == void 0ではtrue、ですので、多分

`undefined`

単純に次のようになります。

undefined
于 2012-08-29T09:37:53.290 に答える
1

このサイトhttp://js2coffee.org/を試してみてください。jsからコーヒー(および逆方向)へのコンバーターです。

于 2012-08-29T08:59:54.710 に答える