2

leiningen 插件 figwheel 或 boot 的对应物可以在任意网页中使用吗?我认为它可以替代浏览器的内置开发者控制台。

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

我想这应该不会太成问题而无法归档。但是,我遇到了以下问题:

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

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

我使用引导进行尝试。设置好引导的 ClojureScript REPL 后,我在浏览器中打开了 localhost:port。它的初始源代码如下所示:

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

在页面加载时执行 main.js 之后,许多(超过 100 个)进一步的 javaScript 标记被注入到页面中。我最初的想法是现在打开另一个页面,比如duckduckgo.com,然后将一个脚本标签注入其中,并添加到本地主机的绝对路径。所以,在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...后来导致问题在这里。

有人知道存档的方法吗?

4

0 回答 0