4

我在 cljs 文件中有以下代码:

(def template 
    "<script type=\"text/javascript\">
      console.log(\"The script was run\");
    </script>")

(defn add-script []
  (let [s (js/document.createElement "div")]
    (set! (.-innerHTML s) template)
    (js/document.head.appendChild (.-firstChild s))))

(很明显,真正的脚本模板的内容与此不同,但这说明了问题)

当我在 add-script 运行后查看文档时,果然,脚本模板已经插入到代码中。问题是代码实际上并没有被执行。如果这只是 js,我会简单地评估模板。但是,Clojurescript 没有 eval,所以我想我会尝试使用脚本标签动态添加 javascript 模板的内容。

我怎样才能让它工作,具体来说,我怎样才能让我的脚本模板的这些内容在我动态插入后进行评估?

4

2 回答 2

3

我用这段代码做了类似的事情

(let [the-head js/document.head
      the-script (.createElement js/document "script")
      the-script-value "console.log(\"The script was run\");"
      ]
  ; if you need to load a js file
  ;(set! (.-type the-script) "text/javascript")
  ;(set! (.-src the-script) "url_file")
  (set! (.-innerHTML the-script) the-script-value)  
    (.appendChild the-head the-script)
  )

希望对你有帮助

于 2013-10-22T09:32:36.013 回答
0
(def template 
    "<script type=\"text/javascript\">
      console.log(\"The script was run\");
    </script>")

(defn add-script []
  (let [e (js/document.createElement "script")
        t (subs template 32 (- (count template) 14))]
    ;; t -> "      console.log(\"The script was run\");"
    (set! (.-text e) t)
    (js/document.head.appendChild e)))

作品。实际上,我对这种 innerHTML 行为导致代码无法加载感到非常惊讶。似乎不一致,对我来说没有多大意义。

我还希望有一个适当的 Clojurescript 正则表达式来抓取我的脚本标签中的内容。我似乎找不到在 cljs 中实际使用正则表达式的工作示例。

于 2013-07-18T20:44:17.180 回答