0

私は初めてのブックマークレットを CoffeeScript で作成していますが、重要な機能を動作させるのに苦労しています。

これは、Web ページから選択したスニペットで組織モード ファイルを更新するために使用したい、目的のスクリプトです。

fs = require 'fs'

appendfile = fs.createWriteStream('webjournals.org',
    flags: "a"
)
appendfile.write("\n")
appendfile.write("* ")
appendfile.write(document.title)
appendfile.write("\n")
appendfile.end(window.getSelection().toString())

これは、JS にコンパイルされた場合 (そして、bookmarklet-izerを介して実行された場合) は機能しません。実際、これでさえ機能しません:

(function() {
  var fs;

  fs = require('fs');

  alert(document.title);

}).call(this);

ただし、これは機能します。

(function() {
  var fs;

  alert(document.title);

}).call(this);

このコードを手動で Coffee インタープリターのブラウザー関連機能までチェックしたところ、動作します。org-file で変更を確認できます。私は何が欠けていますか?

4

2 に答える 2

1

fsモジュールは node.js API であるため、ブラウザーから直接使用することはできません。

私が思いつく最も簡単な解決策は、coffeescript を使用して Web サーバーを作成し(たとえば、localhost:1234 で)、ブックマークレットにスニペットをサーバーに送信させ ( jQuery.postを使用)、ローカルに書き込むことです。ファイル。

例として、スニペットは左から右に移動します。

Web ページ --> ブックマークレット --> ローカル HTTP サーバー --> Org-mode ファイル --> Emacs

もう 1 つの解決策は、ローカル ファイルシステムにアクセスできる Firefox アドオンを作成することです (ただし、APIではファイルへの追加が許可されていないようです)。

Filesystem APIなどの新しい API がいくつかありますが、完全なファイル システムにアクセスすることはできず、emacs からもアクセスできないサンドボックス化されたシステムにアクセスできないため、それらは行き止まりのようです。

于 2013-10-01T10:40:51.757 に答える
1

ローカル Web サーバーを使用して node.js を実行し、スクリプトを実行してファイルシステムにアクセスできるようにすることを検討している場合 (guillaume の回答で示唆されているように)、Org-Protocolの使用と、試行済みのテスト済みの書き込み方法の使用も検討する必要があります。組織ファイル ( Org-Capture )。

Org-Protocol チュートリアルでは、接続をセットアップするための適切な情報 (Windows のレジストリ エントリ、Mac の Emacs.app の構成、Gnome と KDE のメソッド)、およびブックマークレットが作業を実行できるようにする JavaScript が提供されます。

次に、取得した情報を含む適切な Capture テンプレートを作成し、必要に応じてフォーマットするだけです。

于 2013-10-02T18:37:59.293 に答える