Элемент, который вы пытались найти, не был в DOM , когда ваш скрипт работал.
Позиция вашего DOM-зависимого скрипта может оказать глубокое влияние на его поведение. Браузеры анализируют HTML-документы сверху донизу. Элементы добавляются в DOM, и сценарии выполняются (как правило), когда они встречаются. Это означает, что порядок имеет значение. Как правило, скрипты не могут найти элементы, которые появляются позже в разметке, потому что эти элементы еще не добавлены в DOM.
Рассмотрим следующую разметку; сценарий # 1 не находит Итак, что вы должны делать? У вас есть несколько вариантов: Переместите свой скрипт дальше по странице, перед закрывающим тегом тела. Организованный таким образом остальная часть документа анализируется до того, как будет выполнен ваш скрипт: Примечание: размещение скриптов внизу как правило, считается лучшей практикой . Отмените свой сценарий до тех пор, пока DOM не будет полностью проанализирован, используя Примечание. Вы можете просто привязать к Делегированные события имеют преимущество в том, что они могут обрабатывать события из элементов-потомков, которые будут добавлены в документ позже. Когда элемент вызывает событие (при условии, что это bubbling g6], и ничто не останавливает его распространение), каждый родитель в родословной этого элемента также получает событие. Это позволяет нам привязать обработчик к существующему элементу и примерным событиям, когда они пузырятся от его потомков ... даже те, которые добавлены после присоединения обработчика. Все, что нам нужно сделать, это проверить событие, чтобы узнать, был ли он поднят нужным элементом и, если да, запустите наш код. jQuery Примечание: Обычно этот шаблон зарезервированы для элементов, которые не существовали во время загрузки или , чтобы избежать прикрепления большого количества обработчиков. Также стоит отметить, что, пока я прикреплял обработчик к Используйте атрибут [ Для справки, вот код из этого внешнего скрипта : Примечание: атрибут
Вариант 1: Переместите свой скрипт
Вариант 2: jQuery's
ready()
ready()
:
DOMContentLoaded
или window.onload
, но у каждого есть свои оговорки. jQuery ready()
предоставляет гибридное решение. Вариант 3: Делегирование событий
on()
выполняет эту логику для нас. Мы просто предоставляем имя события, селектор для желаемого потомка и обработчик событий:
document
(для демонстрационных целей), вы должны выбрать ближайшего надежного предка. Вариант 4: Атрибут
defer
defer
в .
defer
, логический атрибут] установлен для указания на браузера, который должен выполняться после того, как документ был проанализирован.
document.getElementById("test").addEventListener("click", function(e){
console.log("clicked: %o", this);
});
defer
, безусловно, кажется , как волшебная пуля , но важно знать об оговорках ... 1. defer
может использоваться только для внешних скриптов, т. е. для тех, у кого есть атрибут src
. 2. знать о поддержке браузера , то есть: ошибка реализации в IE & lt; 10
Я сделал большую работу, обрабатывающую электронные письма возврата и там различные типы. Если Вы хотите быть абсолютно уверенными, что электронная почта, Ваш взгляд на является действительно возвратом определенного вида, который я настоятельно рекомендую получению хорошего фильтра. Я работал с Инструментами Буги-вуги, и это работало очень хорошо. Это сообщает, какой возврат это, Твердо, Мягко, Переходное или если даже кто-то пытающийся отказываться от подписки. Это имеет muliple API включая .NET, и мне было легко вполне получить работу.
Спасибо за ответ, большой! Я провел некоторое исследование сам и нашел ListNanny - также супер простой использовать и говорю Вам тип возврата. Будет писать некоторое подтверждение концепции и видеть, какой я люблю лучше...
Довольно легко сделать с TcpClient. Откройте сервер:
TcpClient tcpClient = new TcpClient();
tcpClient.Connect(POP3Server, POP3Port);
NetworkStream stream = tcpClient.GetStream();
Прочитайте желанное сообщение:
int read = stream.Read(inBuffer, 0, inBuffer.Length);
string response = Encoding.ASCII.GetString(inBuffer, 0, read);
if (response.IndexOf("+OK") != 0) throw new ...;
Запишите обратно к серверу:
byte[] outBuffer = Encoding.ASCII.GetBytes("USER " + account + "\r\n");
stream.Write(outBuffer, 0, outBuffer.Length);
Это отправляет команду USER. Необходимо войти в систему, и затем можно начать захватывать сообщения - посмотрите POP3 RFC для полного списка команд. Если Вы не обращаетесь к выезду самокрутки эта статья CodeProject.
как abfo говорит, протокол POP3 супер прост, получение сообщений не является никаким brainer. Парсинг сообщений для получения отказов более труден, и надежно анализирующий, какая электронная почта вызвала отказ и почему это перестало работать, действительно твердо. Проблема состоит в том, что возвращенные сообщения не имеют стандартного формата, формы по умолчанию варьируются от MTA до MTA. Затем причину отказа может настроить администратор сайта, мешающий распознать, и администратор сайта мог изменить шаблон сообщения об отказе, который заставляет ее чинить почти невозможный.
Посмотрите, можно ли найти менеджер почтовой рассылки.NET и если можно повторно иметь целью код обработки возврата. Сбой этого, посмотрите, можно ли изменить инструмент, это отправляет сообщения для отправки каждого электронного письма от уникального (и обратимый) enveloper отправитель (VERP, я думаю, что это называют?). Тем путем Вы не должны сканировать тело электронной почты, можно сказать который получатель, отказавший путем исследования адреса получателя сообщения об отказе.
Ваш вопрос заставил меня понять, что плагин Новостной рассылки Wordpress, который я собирался использовать, не имел управления возвратом, и мне будет нужно что-то также.
Я озирался некоторое время, и я обосновался на свободном и менеджере по новостной рассылке PHPlist с открытым исходным кодом.
Они описывают подробно свои настройки для обработки возвратов, и у них действительно есть экспериментальная усовершенствованная функция обработки возврата, которая позволит Вам настраивать возврат, обрабатывающий точно способ, которым Вы хотите.
Evem, если Вы решаете не использовать PHPlist, читая, как они делают это, будет полезной информацией для Вас.