如何编译代码 ClojureScript 以在 PhantomJS 中使用?

How can I compile code ClojureScript for use in PhantomJS?

我正在尝试在 ClojureScript 中编写 PhantomJS 脚本。我以 Node 为目标并使用 phantomjs-node [1]。我有一个基本的例子 working:

(def phantom (js/require "phantom"))
(defn -main [& args]
  (-> phantom
    (.create (fn [browser]
      (-> browser
        (.createPage (fn [page]
          (-> page
            (.open "http://google.com" (fn [status]
              (if (= status "success")
                (-> page (.render "example.png")))
              (-> browser .exit)))))))))))

现在,如果我使用 PhantomJS 网页对象的 evaluate 函数 [2],我会出现以下错误:

phantom stdout: ReferenceError: Can't find variable: <namespace here>

编译成 JavaScript 时,要评估的代码包含 CLJS 命名空间,因此无法在 PhantomJS 的网页对象的上下文中正确评估。这是一个例子:

(defn -main [& args]
  (-> phantom
    (.create (fn [browser]
      (-> browser
        (.createPage (fn [page]
          (-> page                                                                                      
            (.open "http://google.com" (fn [status]
              (println (str "opened google? " status))
                (-> page
                  (.evaluate #(-> document .-title)
                    #(do
                      (println (str "Page title is " %))
                      (-> browser .exit))))))))))))))                 

如何防止在 PhantomJS 的网页对象中计算的代码被命名为 CLJS 命名空间?或者其次我还有其他选择吗?

您需要使用 js/document 而不是 documentdocument是对clojurescript变量的引用,js/document是js世界里的文档。