1 (изменено: inter-hosting, 2014-04-16 13:35:11)

Тема: HTA: Кросс-доменное HTA приложение

Здравствуйте, уважаемые коллеги!
В процессе разработки кросс-доменного HTA-приложения, осуществляющего интеграцию в собственный интерфейс набора iframe-элементов, загружаемых с различных внешних web-ресурсов, возникла проблема
Дело в том, что если интегрируемый в iframe-элемент внешний web-ресурс содержит ошибки в JScript-источнике, то производится безусловное отображение окна JScript-ошибки, которое можно закрыть только мануально, и которое к тому же останавливает исполнение основного HTA-приложения
Нужно решение, позволяющее определенным образом обойти обозначенную проблему; решение подойдет любое, являющееся даже "очень сильным костылем", лишь бы избавляться от окон JScript-ошибок и блокировки выполнения HTA
Разумеется очевидно, что исходный код загружаемых в iframe-окна внешних web-ресурсов никак не может быть изменен, и поэтому вариант избавиться от оригинальных JScript-ошибок - сразу не подходит в принципе; по некоторым соображениям не подходит и proxy-вариант, который бы оборачивал исходные коды в try/catch-блоки - нужен именно оригинальный web-ресурс без каких-либо изменений
Также разумеется, что на стороне HTA-клиента подразумевается можно делать что угодно, главное чтобы программным способом в HTA-приложении: хоть создать поток, который закрывает эти окна с ошибками, хоть обращение к JScript-интерпретатору и получение текущих ошибок
Более того не важно, если предложенный метод будет приводить к некорректной работе интегрируемых web-приложений, основная и единственная задача - выключить окно JScript-ошибки и не прерывать исполнение HTA-приложения
Заранее большое спасибо!

2

Re: HTA: Кросс-доменное HTA приложение

Приведите самый простой пример. Думаю проблема решится без костылей через событие <body onerror="return false" >

3 (изменено: inter-hosting, 2014-04-16 13:33:30)

Re: HTA: Кросс-доменное HTA приложение

Спасибо за внимание к вопросу! Простой конкретизированный пример

<html>
<head>
  <HTA:APPLICATION ID="oHTA"
    BORDERSTYLE="normal"
    VERSION="1.0">
</head>
<body onerror="return false">
<iframe src="http://gs.statcounter.com/">
</iframe>
<br>
</body>
</html>

Возникает вот такая ошибка http://i052.radikal.ru/1404/0c/dfc1e9af7a78.png

4

Re: HTA: Кросс-доменное HTA приложение

К сожалению, как я не мудрил с HTA, у меня ничего не вышло.

Рассматривал такие решения:
1. Изменение параметров настройки IE в реестре


    <script type="text/javascript">
    var WshShell = new ActiveXObject("WScript.Shell");
    WshShell.RegWrite("HKEY_CURRENT_USER\\Software\\Microsoft\\Internet Explorer\\Main\\Disable Script Debugger", "yes");
    WshShell.RegWrite("HKEY_CURRENT_USER\\Software\\Microsoft\\Internet Explorer\\Main\\DisableScriptDebuggerIE", "yes");
    WshShell.RegWrite("HKEY_CURRENT_USER\\Software\\Microsoft\\Internet Explorer\\Main\\Error Dlg Displayed On Every Error", "no"); 

2. добавление onerror в body и iframe.
3. использование локального "валидного" HTM-файла в IFRAME, в котором содержится IFRAME на внешний ресурс.

В общем, не получилось. Могу предложить следующие решения:
1. Работа с сайтами посредством аякса. Получаете разметку и спокойно ее отображаете. Подходит только для отображения информации, при условии, что страничка без динамики.
2. Создавать скрытое окно InternetExplorer и оттуда забирать разметку. Подходит, если имеется динамика на сайтах.
3. Посмотреть в сторону сторонних ActiveX-компонентов либо создания веб-сервисов в качестве прослойки.