Ghost - 嵌入式 JavaScript 不会触发 d3js
Ghost - Embedded JavaScript doesn't trigger d3js
我在博客中使用 d3js 时遇到问题 post。
我这样安装成功了
copy d3.min.js to /content/themes/[theme name]/assets/js/
并添加
<script src="{{asset "js/d3.min.js"}}" charset="utf-8"></script>
进入
/content/themes/[theme name]/default.hbs
顺便说一句:将其添加到 <head>
部分很重要!
如果我将 <script>
添加到我的 Markdown 博客 post,我没有得到任何预期的 result/action
<script>
var svg = d3.select("#animviz")
.append("svg")
.attr("width", w)
.attr("height", h);
// some additional code you can find below
</script>
<div id="animviz">
</div>
我也尝试围绕这个 JS 编写自执行函数:
(function(){
// the hole code
})();
没有成功。
唯一有效的方法是在 Ghost-Settings->Code Injection->Blog Footer 中包含 the hole code
:
<script src="https://gist.githubusercontent.com/blablarnab/7621762/raw/0fc10237392911e12c4641c44cdd63066573430b/caterpillar.js"></script>
如果我将目标 <div id="animviz"></div>
添加到博客 posts Markdown 中,这会起作用。
有什么想法吗?我认为这是降价解析器问题。一个可能的解决方案是有一种方法可以将代码附加到博客 post 之外的 DOM(博客页脚)并刷新代码。但是怎么办? location.reload();
我想也会像 d3js 一样死掉吗?
解析器尝试在博客 post 本身中执行代码。所以它会一步一步。因为 JS 部分在您的 post 中排在第一位,所以没有有效的目标并且什么也没有发生。如果您将 console.log() 添加到您的代码中,您会看到它已执行 - 但未进入目标,因为此时它不存在。
因此,您需要将目标 <div id="animviz">
</div>
放在 <script>// your JS</script>
之前,如下所示:
<div id="animviz">
</div>
<script>
var svg = d3.select("#animviz")
.append("svg")
.attr("width", w)
.attr("height", h);
// some additional code you can find below
</script>
我在博客中使用 d3js 时遇到问题 post。
我这样安装成功了
copy d3.min.js to /content/themes/[theme name]/assets/js/
并添加
<script src="{{asset "js/d3.min.js"}}" charset="utf-8"></script>
进入
/content/themes/[theme name]/default.hbs
顺便说一句:将其添加到 <head>
部分很重要!
如果我将 <script>
添加到我的 Markdown 博客 post,我没有得到任何预期的 result/action
<script>
var svg = d3.select("#animviz")
.append("svg")
.attr("width", w)
.attr("height", h);
// some additional code you can find below
</script>
<div id="animviz">
</div>
我也尝试围绕这个 JS 编写自执行函数:
(function(){
// the hole code
})();
没有成功。
唯一有效的方法是在 Ghost-Settings->Code Injection->Blog Footer 中包含 the hole code
:
<script src="https://gist.githubusercontent.com/blablarnab/7621762/raw/0fc10237392911e12c4641c44cdd63066573430b/caterpillar.js"></script>
如果我将目标 <div id="animviz"></div>
添加到博客 posts Markdown 中,这会起作用。
有什么想法吗?我认为这是降价解析器问题。一个可能的解决方案是有一种方法可以将代码附加到博客 post 之外的 DOM(博客页脚)并刷新代码。但是怎么办? location.reload();
我想也会像 d3js 一样死掉吗?
解析器尝试在博客 post 本身中执行代码。所以它会一步一步。因为 JS 部分在您的 post 中排在第一位,所以没有有效的目标并且什么也没有发生。如果您将 console.log() 添加到您的代码中,您会看到它已执行 - 但未进入目标,因为此时它不存在。
因此,您需要将目标 <div id="animviz">
</div>
放在 <script>// your JS</script>
之前,如下所示:
<div id="animviz">
</div>
<script>
var svg = d3.select("#animviz")
.append("svg")
.attr("width", w)
.attr("height", h);
// some additional code you can find below
</script>