【问题标题】:How can I compile code ClojureScript for use in PhantomJS?如何编译代码 ClojureScript 以在 PhantomJS 中使用?
【发布时间】: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!完全做到了。谢谢,请将此作为答案,以便我将其标记为正确。

标签: phantomjs clojurescript


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-13
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多