Почему document.write больше не работает для меня?

Я работаю в DotNetNuke, но на самом деле это не является проблемой DNN.

Я использую предоставленный DNN метод в моем модуле под названием FormatEmail, который использует document.write для записи электронного письма примерно так:

<script language="text/javascript">

<!--
  document.write(String.fromCharCode(60,97,32,104,114,101,102,61,34,109,97,105,108,116,111,58,119,101,98,109,105,110,64,97,116,101,110,118,101,108,100,116,46,111,114,103,34,62,119,101,98,109,105,110,64,97,116,101,110,118,101,108,100,116,46,111,114,103,60,47,97,62))
// -->

</script>

Я только что установил DNN 5, который, как я знаю, включает в себя jQuery и другие дополнения к кодовой базе. Будет ли jQuery останавливать работу кода document.write?

Должен ли DNN использовать другой метод для маскировки текста от ботов?

Должен ли я прекратить использовать этот метод как способ сокрытия моих адресов электронной почты?

Обновление: страница не использует xhtml.

3 ответа

Решение

Я думаю, что нашел конкретный ответ в системе отслеживания ошибок DNN:

вывод должен быть:

<script type="text/javascript">

//<![CDATA[
 document.write(String.fromCharCode(60,97,32,104,114,101,102,61,34,109,97,105,108,116,111,58,84,101,115,116,64,106,101,102,102,109,97,114,116,105,110,46,99,111,109,34,62,84,101,115,116,64,106,101,102,102,109,97,114,116,105,110,46,99,111,109,60,47,97,62))
//]]>

</script>

Похоже, это решает проблему для моего сайта (на котором не было XHTML).

Ошибка находится здесь.

Я не знаю, произошло ли это, но document.write а также document.writeln не будет работать, если ваш сайт сообщает браузеру, что он строгий XHTML. Я считаю, что для этого вам нужно использовать строгий DOCTYPE и установить Content-Type заголовок к application/xml+xhtml скорее, чем text/html (по умолчанию под многими серверами). Это потому, что манипулирование DOM таким образом может сломать его. Например, если я опущу следующую половину пути на проверенную веб-страницу:

<script type="text/javascript">
<!--
    document.write("</body>");
// -->
</script>

Документ будет проверен и будет соответствовать XHTML, но не будет работать в большинстве браузеров.

Альтернативой является создание узла DOM, в который должен быть вставлен адрес электронной почты, и вставка его после загрузки страницы. Например:

<p>My email address is <span id="email"></span>.</p>
<script type="text/javascript">
<!--
    document.body.onload = function() {
        document.getElementById("email").textContent = String.fromCharCode(60,97,32,104,114,101,102,61,34,109,97,105,108,116,111,58,119,101,98,109,105,110,64,97,116,101,110,118,101,108,100,116,46,111,114,103,34,62,119,101,98,109,105,110,64,97,116,101,110,118,101,108,100,116,46,111,114,103,60,47,97,62);
    };
// -->
</script>

Или, как вы настроили JQuery:

<p>My email address is <span id="email"></span>.</p>
<script type="text/javascript">
<!--
    $( function() {
        $("#email").text(String.fromCharCode(60,97,32,104,114,101,102,61,34,109,97,105,108,116,111,58,119,101,98,109,105,110,64,97,116,101,110,118,101,108,100,116,46,111,114,103,34,62,119,101,98,109,105,110,64,97,116,101,110,118,101,108,100,116,46,111,114,103,60,47,97,62));
    } );
// -->
</script>

Джефф,

Вы нашли правильное решение, но, честно говоря, я не совсем уверен в пользе этого. Да, электронная почта может быть очищена, но этот процесс просто излишний, по крайней мере, на мой взгляд. Нет необходимости запускать javascript, просто чтобы отобразить ссылку на электронную почту.

Это всего лишь мои 0,02 доллара по вашему очень конкретному вопросу.

Другие вопросы по тегам