E1l showmodaldialog is not a function

Кинотавр

Новичок

Ошибка с ShowModalDialog

Возникла проблема с вызовом диалогового окна в JavaScript.

Есть некая функция нарезки превьюшек. Она запускает диалоговое окно, в котором пользователь выбирает область картинки, которую надо превратить в превьюшку. После клика на кнопке "Сохранить", окно закрывается, и координаты выделенной области передаются в следующее диалоговое окно. Его функция — запустить файл image_thumb_create2.php, в котором создается превьюшка и выводится сообщение о том, что работа успешно проделана.

Возникла следующая проблема. Не открывается второе диалоговое окно. Выводится ошибка сценария "Объект не поддерживает это свойство или метод".
Причем, эта ошибка возникает только в определенных версиях IE. Пробовали на Maxthon — все работает нормально. На IE 6 SP3 — нормально. А вот IE 6 SP2 — выводится ошибка.

Ниже приводится код функции.
Прошу помочь.
Спасибо.

Scenario : There is an input element in a HTML page where u can enter any numbers/text. If 2 consecutive characters are entered, then I am calling showModalDialog() method to open a pop up window which is having another input element. Whatever the characters entered in parent page will be copied to that search box.

Issue : If user types a text fast(without break) for searching with more than 2 characters (for ex. apple) then 3rd and/or 4th character/s typed are missed out(not traced by keyUp event). I mean only aple word is copied into search box present in pop up. So user need to retype the text.

Solution needed : Whenever user types any text, pop up needs to be triggered and all the characters need to be copied into search box in pop up

Environment : Reproducing only in IE9

Languages : HTML, Javascript

Note : What I have analysed is, since there is a delay in triggering pop up window, characters typed after 2 charaters are missed out. I don’t know why this is occuring only in IE9 also I can not upgrade to IE10 for resolving issue.

Читайте также:  Почему мерцает камера на телефоне?

Still I am stucked up with this issue. Is there any alternative solution for this? Any other way to get all the functionality of modal dialog with some other element/s?

Here is the sample code snippet of parent HTML:

Последний релиз популярного браузера Google Chrome помимо очередных новшеств и багфиксов принес головную боль 1С-разработчикам. Ошибка проявляется при использовании веб–клиента "1C" в браузере Google Chrome 37 и всех остальных бродилках, основанных на Chromium (например, Opera). При попытке вызвать модальное окно, Google Chrome 37 выплевывает ошибку: «Underfined is not function». При нажатии единственной кнопки «ok» веб-клиент сгенерирует стандартное сообщение «Открытие нового окна было заблокировано, видимо сработал блокировщик всплывающих окон» и предложит перезапустить приложение. Перезапуск приложения вернет на окно авторизации и дальше все по кругу.

Способ решения #0

Переписать участки кода с вызовом модальных окон в соответствии с рекомендациями компании "1С". Мой проект на текущей стадии не был готов к использованию новых функций, поэтому на этапах вызова окна загрузки файлов и вызова любого модального окна я ловил [bold]«Underfined is not function»[/bold].

Способ решения #1

Самый простой способ решить проблему – попросить клиентов перейти на Mozilla FireFox. Там подобная ошибка не проявляется и в целом все работает хорошо. Именно так я и поступил. Однако, у некоторых клиентов начали возникать проблемы при скролинге элементов в формах списков. По непонятным причинамFireFox генерировал ошибку и браузер падал. Ошибка проявлялась не у всех, но ждать пока с проблемой столкнуться все пользователи я не мог.

Способ решения #2

Дальше я решил попробовать перевести проблемных клиентов на старые версии браузера Google Chrome. Мне удалось раздобыть в сети дистрибутив «Google Chrome 32» и он успешно был внедрен нескольким клиентам с отключенной функцией автоматического обновления. Способ опять же рабочий, но не элегантный – нельзя же всех лишить возможности обновления браузера.

Читайте также:  Где находится стим ключ

Способ решения #3

Предыдущие способы имеют явные минусы, поэтому я решил отправиться и почитать информацию из ChangeLog’а к последней версии Google Chrome. Поиск по слову «modal» вывел меня на пункт, где четко говорилось, что поддержка функции showModalDialog() в новой версии Google Chrome удалена. Отлично, уже хоть что-то.

Перейдя в детальное описание этой фичи, я увидел, что при необходимости данную функцию можно активировать (. ). Разработчики Google Chrome поступили мудро и оставили пути отступления, которыми можно пользоваться аж до мая 2015 года. Этого времени хватит, чтобы разработчики успели обновить свои решения.

Теперь собственно говоря само решение. Открываем редактор реестра Windows (regedit) и переходим в раздел«HKEY_LOCAL_MACHINESOFTWAREPolicies». Здесь вам нужно создать новые разделы:«GoogleChromeEnableDeprecatedWebPlatformFeatures»

После переходите в раздел «EnableDeprecatedWebPlatformFeatures» и создайте в нем строковый ключ с именем «1С» и присвойте ему значение «ShowModalDialog_EffectiveUntil20150430». Должно получиться что-то вроде этого:

На этом шаге редактор реестра можно закрывать и открывать Google Chrome. В адресной строке бродилки вводим: «chrome://policy/» (без кавычек) и переходим по этому адресу. Должна открываться страница с политиками Chrome.

Изначально она будет пустой. Нажимаем кнопку «Повторно загрузить политики». Если вы все сделали правильно в реестре, то после нажатия кнопку вы увидите табличку c одной записью о функции«showModalDialog».

Теперь никаких ошибок в веб-клиенте не будет. Ваши клиенты смогу продолжать работать, а вы получите время для адаптации конфигурации к нововведениям. Чтобы немного облегчить процесс, я сделал экспорт описанных выше ключей в файлик. Можете его загрузить и импортировать в свой реестр. Экспорт делал в Windows 7.

Исправление ошибки веб-клиента в Google Chrome 37: chrome37_fix_by_spider_net.zip

Читайте также:  Сравнение unity и unreal engine

Если не помогло

Итак, если ваш компьютер не входит в домен, и вы столкнулись с ошибкой веб-клиента 1С «underfined is not function» выполните несколько шагов:

  • Загружаем по этой ссылке административный шаблон настроек политик Chrome. По ссылке доступен adm шаблон. Если требуется в формате admx или json для Linux, то качаем полный архив с шаблонами отсюда (http://dl.google.com/dl/edgedl/chrome/policy/policy_templates.zip). Распаковываем в какую-нибудь директорию.
  • Открываем консоль локальных групповых политик gpedit.msc (например, через «пуск» -> «Выполнить»).

  • Раскрываем узел «Конфигурация компьютера» и кликаем правой кнопкой мыши по «Административные шаблоны». В контекстном меню выбираем «Добавление или удаление шаблонов».

  • В появившемся окне нажимаем кнопку «Добавить» и выбираем файл «chrome.adm», который мы извлекли из загруженного в пункте 1 архива. Наш шаблон должен появиться в списке текущих шаблонов политики. Нажимаем кнопку «Закрыть».

  • Переходим в узел «Административные шаблоны» -> «Классические административные шаблоны» -> «Google» . В этом узле ищем пункт «Включить устаревшие функции веб-платформы».

  • Дважды кликаем по нему и в появившемся окне устанавливаем переключатель на позицию «Включить». В разделе «Параметры» активируется кнопка «Показать». Нажимаем ее.

  • В появившемся окне кликаем по первой строке и вводим: «ShowModalDialog_EffectiveUntil20150430» (без кавычек). После этого нажимаем «Ok» и аналогичную кнопку в окне «Включить устаревшие функции веб-платформы». Затем закрываем редактор локальных групповых политик.

Оцените статью
Добавить комментарий