Почему document.write больше не работает для меня? - PullRequest
0 голосов
/ 16 мая 2009

Я работаю в 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 ]

5 голосов
/ 16 мая 2009

Я не знаю, произошло ли это, но 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>
2 голосов
/ 16 мая 2009

Я думаю, что нашел конкретный ответ в системе отслеживания ошибок 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).

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

0 голосов
/ 16 мая 2009

Джеф,

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...