2014-02-20 5 views
3

Это сводило меня с ума. Я пытаюсь перенести некоторые устаревшие приложения на новый сервер, и у меня возникло много проблем с document.all, набитыми по всему коду.Код JavaScript, работающий на старом сервере, но не на новом

Прежде чем вы это скажете, я знаю. Не используйте document.all. Он есть, и я ничего не могу с этим поделать ... эта конкретная проблема связана с JavaScript внутри сборки, для которой у меня нет исходного кода, и у меня нет разрешения на перепроработку.

Мое основное недоумение в том, что текущая версия приложения работает, когда я тестирую в том же браузере, что и моя перенесенная версия. Это прямая операция копирования и вставки, и во время миграции код не изменился, но когда я запускаю приложение на новом сервере, document.all(element) всегда возвращает null.

Является ли IIS или более ранние .NET-платформы каким-то образом обрабатывают клиентские скрипты по-разному?

я происхожу из .NET 2.0, размещенного на Windows Server 2005 с IIS 6, и собираюсь .NET 4.0, размещенного на Windows Server 2012 с IIS 8.

Я ищу какие-либо идеи, почему это будет быть ведут себя по-разному при тестировании в одном браузере

ОБНОВЛЕНИЕ: пользовательский элемент управления мишенью document.all становится закодирован, который портя идентификатор элемента управления, то есть то, что должно быть 'elementId' в настоящее время выдается в виде 'elementId'

Код в a ssembly использует Attributes.Add, который включает одинарные кавычки. Я нашел несколько источников, предполагающие новый класс, такие как:

public class HtmlAttributeEncodingNot : System.Web.Util.HttpEncoder 
{ 
    protected override void HtmlAttributeEncode(string value, System.IO.TextWriter output) 
    { 
     output.Write(value); 
    } 
} 

добавляется, что позволит кодирования быть выключен с помощью <httpRuntime encoderType="HtmlAttributeEncodingNot"/> в web.config, но я не могу добавить новые классы этот проект

+0

Проверьте, как вы указали 'DOCTYPE' поверх своих страниц. – Aristos

+0

Он установлен в' ' – McFixit

+0

Возможно, это могло бы помочь: http://stackoverflow.com/questions/6488579/firefox-error-document-all-is-undefined-webuivalidation-js –

ответ

0

Похоже, что ваш проект заканчивает жизнь, и вы просто хотите вдохнуть новую жизнь в нее. Я думаю, document.all выполняется как IE11, не так ли, - так что часы тикают.

Что я предлагаю написать Javascript для повторения DOM и поиска любых кодированных идентификаторов, а затем изменить их обратно в форму .NET 2. Запустите JS в нижней части страницы (в отличие от onload), и, надеюсь, ничто не попытается получить доступ к document.all, прежде чем вы исправите идентификаторы.

+0

Согласен. Хотя я придумал несколько идей для хакерского исправления, я действительно не так, как я предпочитаю делать что-то. Несмотря на то, что document.all не является основной проблемой, это только вопрос времени, когда приложение снова ломается, так как наши пользователи используют IE 10 и 11. Я попробую сценарий для декодирования сущностей и предоставления некоторых вариантов людям кто может на самом деле принять решение по этому поводу, спасибо. – McFixit

+0

Рад помочь - если вы сможете принять мой ответ, я смогу накормить семью еще на месяц - спасибо. –

1

Я собираюсь оставить принятый ответ таким, какой он есть, но добавьте этот ответ, если у кого-то еще есть проблемы с этим в будущем.

Мои обстоятельства изменились, и я смог добавить класс в проект. Класс в моем вопросе:

public class HtmlAttributeEncodingNot : System.Web.Util.HttpEncoder 
{ 
    protected override void HtmlAttributeEncode(string value, System.IO.TextWriter output) 
    { 
     output.Write(value); 
    } 
} 

наряду с использованием класса для кодирования в web.config: <httpRuntime encoderType="HtmlAttributeEncodingNot"/>

было достаточно для работы с одиночными кавычками в Attributes.Add кодируются в $#39;

Кроме того, что-то, что нужно искать со старым JavaScript, - это способ, которым .NET передает ClientID элементов управления.Используя комбинацию вышеуказанного кода вместе с <xhtmlConformance mode="Legacy"/> и clientIDMode="AutoID", я смог отобразить html так же, как и его эквивалент 2.0, и решить проблему на данный момент.

Смежные вопросы