将figwheel或boot的cljs-repl注入任意网页

时间:2016-07-18 16:03:48

标签: javascript clojurescript leiningen figwheel

leiningen插件式无花果或靴子的对应物是否可以在任意网页中使用?我认为它是浏览器内置开发者控制台的替代品。

以下是我想象这个工作流程的简单方案: 您在浏览器中打开任意网站。除此之外,您在终端窗口中有一个浏览器repl,它由上面提到的工具之一提供。 (我猜他们都为此使用'weasel'。) 在终端内部,可以访问weppages的DOM的当前状态。 例如:(set! (.. js/window style backgroundColor) "green"))

我想这不应该存档太麻烦。但是,我遇到了以下问题:

这两个工具实际上只是将一堆JavaScript注入到用户的HTML页面中。它基本上是:用户的ClojureScript编译为JavaScript以及通过websockets进行热重新加载机制的额外实现。当项目投入生产时,第二个被省略。

我的想法是将整个捆绑包注入另一个页面。

我尝试使用boot。 在设置了引导的ClojureScript REPL之后,我在浏览器中打开了localhost:port。它的初始资源看起来像这样:

<!doctype html>
<html>
  <head>
    <title>Hello, World!</title>
  </head>
  <body>
    <script src="js/main.js"></script>
  </body>
</html>

after main.js已在页面加载时执行,许多(超过100个)其他javaScript标记被注入页面。我最初的想法是现在只打开另一个页面,比如duckduckgo.com,并向其注入一个脚本标记,并使用localhost的绝对路径进行扩充。 所以,在duckduckgo.com页面上,在开发者控制台内我做了这个:

tag = document.createElement("script");
tag.src = "http://localhost:3000/js/main.js";
document.body.appendChild(tag);

正如预期的那样,脚本被注入,这总是导致其代码的立即执行。我期待所有其他脚本标签现在自动注入。最后,webSockets应该连接到ClojureScript repl。

但是,浏览器控制台中存在以下错误:A call to document.write() from an asynchronously-loaded external script was ignored.

实际上,已经注入了许多其他脚本标签。但不是全部。实际上,套接字连接没有建立。

所以,看起来有些脚本标签是由我自己使用的机制注入的(通过appendChild),其他的应该由document.write("<script...完成。后来会导致问题。

有人知道存档的方法吗?

0 个答案:

没有答案
相关问题