【发布时间】:2015-07-27 17:05:54
【问题描述】:
我正在尝试在 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 网页对象的上下文中正确评估。这是一个例子:
(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 命名空间命名?或者其次我还有其他选择吗?
【问题讨论】:
-
我在您的代码中没有看到
document变量。试试js/document而不是document。 -
@edbond Woot!完全做到了。谢谢,请将此作为答案,以便我将其标记为正确。