1

我知道我可能做错了,因为如果通过try coffeescript 功能尝试此操作,但令人惊讶的是,它在我的示例中没有发出任何结果:

<!--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

即使在尝试onload使用我在 javascript 中使用的处理程序运行脚本之后

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

document.addEventListener('DOMContentLoaded', loaded);

但随后在咖啡脚本中

loaded = ->
   alert "hello"

document.addEventListener "DOMContentLoaded", loaded

与 javascript 版本相比,似乎没有触发事件方法

任何人都可以帮我找出发生了什么?

谢谢


更新

如果在加载页面后运行控制台,我可以毫无问题地执行以下操作:

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

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

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

如果使用 Safari,页面似乎没有显示5.0.3

4

2 回答 2

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 中也有问题。

于 2011-02-22T15:31:04.723 回答
0

这是一个humdinger,但经过调查,我得到了你的答案:

工作方式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>

默默地失败了。请注意,使用document.createElementErlend 描述的方法或使用 jQuery 之类的库进行插入将可以正常工作。

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

于 2011-02-23T17:03:15.677 回答