写第一个coffeescript bookmarklets

时间:2013-10-01 08:02:23

标签: javascript coffeescript org-mode

我正在用CoffeeScript编写我的第一个书签,但是我无法解决任何非常重要的问题。

这是我想要的脚本,我想用它来更新带有网页选定片段的组织模式文件:

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文件中的更改。我错过了什么?

2 个答案:

答案 0 :(得分:1)

您无法直接在浏览器中使用fs模块,因为它是node.js API。

我可以提出的最简单的解决方案是使用coffeescript(例如在localhost:1234上)create a web server并让书签向服务器提交一个代码段(使用jQuery.post),其中包含turn将写入本地文件。

以说明的方式,代码片段将从左到右:

网页 - >书签 - >本地HTTP服务器 - >组织模式文件 - > emacs的

另一个解决方案是让你创建一个可以访问本地文件系统的Firefox插件(但API似乎不允许附加到文件中。)

有一些新的API,例如Filesystem API,但它们似乎是一个死胡同,因为你无法访问完整的文件系统,而是一个沙盒的,你无法从emacs访问

答案 1 :(得分:1)

如果您正在考虑使用本地Web服务器运行node.js以允许脚本运行并访问您的文件系统(如guillaume的回答中所述),您还应该考虑使用Org-Protocol并使用测试写入组织文件的方法(Org-Capture)。

组织协议教程提供了设置连接的适当信息(Windows的注册表项,为Mac配置Emacs.app以及Gnome和KDE的方法),以及允许书签使用的javascript工作

然后,您只需创建一个合适的Capture模板,以包含您检索到的信息并根据需要对其进行格式化。