如何编译代码 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
而不是 document
。
document
是对clojurescript变量的引用,js/document
是js世界里的文档。
我正在尝试在 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
而不是 document
。
document
是对clojurescript变量的引用,js/document
是js世界里的文档。