Я относительно новичок в Clojurescript и столкнулся с чем-то, что я не совсем уверен, в чем проблема. У меня есть функция в моем clojurescript, которая добавляет в документ новый элемент скрипта для загрузки FB API, для которого скрипт даже не пытается загрузиться. Для этого ресурса нет активности. Я переписал пример на javascript, и он работает. Я просмотрел сгенерированный код clojurescript, и он выглядит в основном так же, как код javascript, который я написал. Я пробовал несколько вещей, но, в конце концов, ничто не заставит браузер загружать динамический скрипт с помощью ClojureScript.
Мой код
(ns wearthisorthat.client.fblogin
(:require [goog.net.XhrIo :as xhr]
[cljs.reader :as cljrdr]
[clojure.browser.repl :as repl]
[domina.events :as ev]
[domina :as d]
[domina.css :as css]))
(defn load-fb-sdk [debug?]
(let [ id "facebook-jssdk"
debug-str (if debug? "/debug" "")
ref (d/by-id "fb-script")
_ (.log js/console "ref = " ref)
parent (.-parent ref)
el-id (d/by-id id)
element (d/string-to-dom (str "<script id=" id " async"
" src=//connect.facebook.net/en_US/all"
debug-str ".js></script>"))
_ (.log js/console element)]
(when-not el-id (d/insert-before! ref element))))
(defn ^:export fbcb []
(let [data {:appId "<myappid>",
:channelUrl "<my-channel>",
:status true,
:cookie true,
:xfbml true}]
(.log js/console "RRRRRRRRRRR")
(js/FB.init (clj->js data))))
;; Load the SDK's source Asynchronously
(.log js/console "RIGHT HERE")
(aset js/window "fbAsyncInit" fbcb)
(load-fb-sdk true)
Мой index.html (до обновления из моего cljs выше)
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<div id="fb-root"></div>
<script id="fb-script"></script>
<script type="text/javascript" src="js/wtot.js"></script>
</body>
</html>
После запуска моего cljs мой документ выглядит так...
<!DOCTYPE html>
<!-- saved from url=(0037)http://localhost:3000/wtot/index.html -->
<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
</head>
<body>
<div id="fb-root"></div>
<script id="facebook-jssdk" async src="//connect.facebook.net/en_US/all/debug.js"></script>
<script id="fb-script"></script>
<script type="text/javascript" src="./index_files/wtot.js"></script>
</body>
</html>
Сетевой трафик Google показывает, что загружаются только index.html и wtot.js, а не debug.js (в журнале нет ошибок, но нет ссылок, чтобы попытаться загрузить debug.js). Если я сделаю динамический элемент сценария статическим, скопировав и вставив динамический элемент выше в свой index.html, тогда код будет работать так, как ожидалось. И, как было сказано ранее, если я сделаю все это в javascript, включая динамическое добавление элемента script, все это сработает. Что мне не хватает?