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

时间:2015-07-27 17:05:55

标签: phantomjs clojurescript

我试图在ClojureScript中编写PhantomJS脚本。我瞄准Node并使用phantomjs-node [1]。我有一个基本的例子工作

(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&#39;的上下文中没有正确评估。网页对象。这是一个例子:

(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命名空间命名代码?或者其次我还有其他选择吗?

1 个答案:

答案 0 :(得分:3)

You need to use js/document instead of document. document is a reference to clojurescript variable, js/document is a document in js world.