使用CoffeeScript编写document.write

时间:2011-02-21 20:58:40

标签: javascript html coffeescript document.write

我知道我可能做错了,因为如果通过try coffeescript feature尝试这个就可以了,但令人惊讶的是它不会在我的例子中发出任何结果:

<!--http://f.cl.ly/items/1u3Q3W101U2T18162v0V/test.html-->
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Page Title</title>
  <script src="http://jashkenas.github.com/coffee-script/extras/coffee-script.js"></script>
</head>
<body>
  <script type="text/coffeescript" >
    document.write "<h2>TEST</h2>"
  </script>
</body>
</html>

document.write方法似乎没有向正文输出任何内容,在这种情况下,console.log工作正常但不是document.write

即使尝试使用像我在javascript中使用的onload处理程序一样运行脚本

var loaded = function(){
  alert("hello");
}

document.addEventListener('DOMContentLoaded', loaded);

然后在coffeescript中

loaded = ->
   alert "hello"

document.addEventListener "DOMContentLoaded", loaded

似乎没有触发事件方法而不是javascript版本

任何人都可以帮我找出发生的事情?

由于


更新

如果在加载页面后运行控制台,我可以正常工作:

CoffeeScript.eval('document.write "<h1>testing</h1>"')

但仍然想知道为什么页面本身没有自动显示

适用于Firefox和Chrome,但不适用于Safari

如果使用Safari 5.0.3

,似乎无法显示该页面

2 个答案:

答案 0 :(得分:4)

我对CoffeeScript一无所知,但不使用document.write 。这是邪恶的:http://javascript.crockford.com/script.html

使用createElement和appendChild / insertBefore代替:

var p = document.createElement("p");
p.innerHTML = "Lolz";
document.body.appendChild(p);

myDiv = document.getElementById("aDiv");
document.body.insertBefore(p, myDiv);

document.write在Safari中也存在问题。

答案 1 :(得分:0)

这是一个哼唱者,但在调查之后,我得到了你的回答:

coffee-script.js的工作方式是在文档加载后查找并运行带有type="text/coffeescript"的脚本。在Safari的情况下,这意味着

<script type="text/coffeescript">
  document.write "<h2>TEST</h2>"
</script>

相当于

<script type="text/javascript">
  window.addEventListener('DOMContentLoaded', function() {
    document.write("<h2>TEST</h2>");
  }, false);
</script>

无声地失败。请注意,使用Erlend描述的document.createElement方法或jQuery等库进行插入将正常工作。

由于这适用于Chrome,我会继续将其称为Safari错误。但故事的真正道德是:不要使用document.write。

相关问题