繁体   English   中英

用CoffeeScript编写document.write

[英]document.write with CoffeeScript

我知道我可能做错了,因为如果尝试使用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却不能

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

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

document.addEventListener('DOMContentLoaded', loaded);

但是然后在coffeescript中

loaded = ->
   alert "hello"

document.addEventListener "DOMContentLoaded", loaded

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

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

谢谢


UPDATE

如果在页面加载后运行控制台,则可以顺利进行以下工作:

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

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

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

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

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

这是一个骗子,但经过调查,我得到了您的答案:

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 bug。 但是,故事的真正寓意是: 不要使用document.write。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM