Я принял ответ НЕУКРОТИМОЙ СТРЕЛЬБЫ ПО ТАРЕЛОЧКАМ, пока кто-то от Microsoft не приезжает для заливки холодной воды на идее. Но я не соглашаюсь с частью дела вкуса - конечно, корректный компилятор более важен, чем полный, но компилятор C# уже очень умен в разбирании в этом преобразовании для нас, насколько это делает. Немного больше полноты в этом случае сделало бы язык легче использовать, преподавать, объяснить, с меньшим количеством пограничных случаев или глюков. Таким образом, я думаю, что это стоило бы дополнительного усилия. Несколько парней в Редмонде царапают головы в течение двух недель, и в результате миллионы кодеров за следующее десятилетие могут ослабиться немного больше.
(я также питаю противное требование там, чтобы быть способом сделать yield return
, выдают исключение, которое было наполнено в конечный автомат "с внешней стороны", кодом, управляющим повторением. Но мои причины желания этого довольно неясны.)
На самом деле один запрос, который я имею об ответе Jon, относится к броску выражения возврата урожая.
, Очевидно, возврат урожая 10 не так плох. Но это было бы плохо:
yield return File.ReadAllText("c:\\missing.txt").Length;
Так не был бы он иметь больше смысла оценивать эту внутреннюю часть предыдущий блок попытки/выгоды:
case just_before_try_state:
try
{
Console.WriteLine("a");
__current = File.ReadAllText("c:\\missing.txt").Length;
}
catch (Something e)
{
CatchBlock();
goto case post;
}
return true;
следующая проблема была бы вложена блоки попытки/выгоды и повторно брошенные исключения:
try
{
Console.WriteLine("x");
try
{
Console.WriteLine("a");
yield return 10;
Console.WriteLine("b");
}
catch (Something e)
{
Console.WriteLine("y");
if ((DateTime.Now.Second % 2) == 0)
throw;
}
}
catch (Something e)
{
Console.WriteLine("Catch block");
}
Console.WriteLine("Post");
, Но я уверен, что это возможно...
Это то, что я искал: http://nix.lv/history/demo.html#3
Нашел на: Сохранить привязку в истории IE6.
Я могу дать вам ответ на этот вопрос, потому что я столкнулся с этой проблемой и решил ее.
Здесь необходимо сначала понять несколько концепций:
http://mail.google.com/mail#inbox
, ] #inbox
- хешированная часть. Назовем это "хешем". поэтому http://mail.google.com/mail
будет нашим «базовым URL». История отслеживания с помощью GMail в основном выполняется с помощью уловок, основанных на этом «хеш-коде».
Итак, еще несколько концепций:
Итак, когда вы переходите с http://mail.google.com/mail#inbox
на http://mail.google.com/mail#sent
, страница не обновляется .
Теперь, если GMail должен был получать уведомление о событии при изменении хэша, то gmail мог бы предпринимать действия на основе этого. К сожалению, нет событий DOM, которые могут помочь нам фиксировать действия в истории. Поэтому вместо этого (это часть, которая показывает, как я преодолел проблему), мы запускаем бесконечный цикл, который проверяет наличие изменений в хэше. Если он замечает изменение, мы обнаруживаем нажатие кнопки «назад» или «вперед» в браузере.
Чтобы решить эту проблему, я создал удобный инструмент: парсер URL . Он может анализировать параметры GET в URL-адресе, а также параметры, закодированные в Hash. Попробуйте демо-версию
Ура!
Об этой проблеме в IE: Я не понимал, что это решение на основе хэша не работает в IE (бедный старый разработчик Linux).
Но для IE вы можете использовать скрытый iframe и использовать его свойство «URL-адрес влияет на историю» для реализации истории. Я знаю, что в этом утверждении нет подробностей, но это связано с моим собственным отсутствием опыта работы с IE.
Я попробую это решение и продолжу:)
Я нашел множество ссылок в Интернете, которые соответствуют правильным реализациям истории с использованием iframe / хэша местоположения. У меня не хватило терпения докопаться до различий между интерфейсом iframe в разных браузерах.
Думаю, я ' Я предпочитаю плагин jquery . У YUI тоже есть менеджер истории.
Ура!