document.write с CoffeeScript - PullRequest
       17

document.write с CoffeeScript

0 голосов
/ 21 февраля 2011

Я знаю, что, возможно, я делаю это неправильно, потому что, если попытаться сделать это с помощью , попробуйте функцию 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);

но затем в coffeescript как

loaded = ->
   alert "hello"

document.addEventListener "DOMContentLoaded", loaded

похоже, что ни один из методов событий не запускается в отличие от версии JavaScript

Кто-нибудь может помочь мне узнать, что происходит?

Спасибо


UPDATE

если запустить консоль после загрузки страницы, я могу заставить работать следующее без проблем:

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

но все еще интересует, почему сама страница не отображается автоматически

Работает в Firefox и Chrome, но не в Safari

Кажется, что страница не отображается при использовании Safari 5.0.3

Ответы [ 2 ]

4 голосов
/ 22 февраля 2011

Я ничего не знаю о 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.

0 голосов
/ 23 февраля 2011

Это унизительно, но после расследования я получил ваш ответ:

Способ работы 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.createElement, описанного Erlend, или с помощью библиотеки, такой как jQuery, будет работать нормально.

Поскольку это работает в Chrome, я бы назвал это ошибкой Safari. Но настоящая мораль этой истории такова: Не используйте document.write.

...