1

Тема: HTA JS: объект WebBrowser

Без определённой конечной цели, для общего развития и расширения кругозора, попробовал поиграться с объектом WebBrowser (clsid:8856F961-340A-11D0-A96B-00C04FD705A2). Но он не хочет со мной играть!
В MSDN описания и примеры - только для C/C#/C++ и VB, поиск в интернете выдал только использование этого объекта для печати (по крайней мере, первые 5 страниц). Сделал тестовый хэтэашник test.hta:

<html>
<body>
  <object id="WBobj"
   classid="clsid:8856F961-340A-11D0-A96B-00C04FD705A2"
   ></object>
</body>
<script type="text/jscript" language="JScript">
  document.onkeydown=function(){
    if(event.keyCode==49){WBobj.navigate('http://www.nix.ru');} // 1
    if(event.keyCode==50){WBobj.navigate('http://www.ixbt.com');} // 2
    if(event.keyCode==116){ // F5
      WBobj.refresh();
      event.cancelBubble=true;
      return(false);
    }else if(event.keyCode==27)window.close(); // Esc
  }
  WBobj.DocumentComplete=function(){alert('DocumentComplete');}
  WBobj.onDocumentComplete=function(){alert('onDocumentComplete');}
  WBobj.DownloadComplete=function(){alert('DownloadComplete');}
  WBobj.onDownloadComplete=function(){alert('onDownloadComplete');}
  WBobj.BeforeNavigate=function(){alert('BeforeNavigate');}
  WBobj.onBeforeNavigate=function(){alert('onBeforeNavigate');}
  WBobj.BeforeNavigate2=function(){alert('BeforeNavigate2');}
  WBobj.onBeforeNavigate2=function(){alert('onBeforeNavigate2');}
  WBobj.DownloadBegin=function(){alert('DownloadBegin');}
  WBobj.onDownloadBegin=function(){alert('onDownloadBegin');}
  WBobj.NavigateComplete=function(){alert('NavigateComplete');}
  WBobj.onNavigateComplete=function(){alert('onNavigateComplete');}
  WBobj.NavigateComplete2=function(){alert('NavigateComplete2');}
  WBobj.onNavigateComplete2=function(){alert('onNavigateComplete2');}
  WBobj.RedirectXDomainBlocked=function(){alert('RedirectXDomainBlocked');}
  WBobj.onRedirectXDomainBlocked=function(){alert('onRedirectXDomainBlocked');}
</script>
</html>

Управление:
1 - навигировать к первому сайту
2 - -"- ко второму
F5 - обновить содержимое объекта
Esc - выход
Из всего этого работают только кнопки 1,2, и то один раз - сразу после загрузки сценария. В остальных случаях выскакивает ошибка "Разрешение отклонено" (Код 0). Я что-то делаю не так, или другого поведения объекта при использовании JScript и быть не должно?

P.S. Статью об объектах WebBrowser и InternetExplorer здесь читал - с неё-то всё и началось... Там тоже JScript не упоминается.

2

Re: HTA JS: объект WebBrowser

function WBobj:DocumentComplete()
{
alert (123);
}

Я конечно далек от мысли... (с)

3

Re: HTA JS: объект WebBrowser

    var x=document.getElementById("WBobj");
    window.onload=function()
    {
        x.navigate('about:blank');
        function x::NavigateComplete2(a,b)
        {
            alert(b);
        }
    }
Я конечно далек от мысли... (с)

4 (изменено: Serge Yolkin, 2012-08-15 22:05:27)

Re: HTA JS: объект WebBrowser

smaharbA, спасибо за события, не сталкивался ещё с таким синтаксисом. Код из поста #3 заработал, из #2 - нет, или в моём примере DocumentComplete не происходит... Но главный вопрос в другом: почему не работает навигация? при нажати на ссылку на открытой странице переход происходит нормально, как в браузере, а вот из скрипта (navigate, navigate2) страница грузится только однажды - сразу после запуска сценария, последующие нажатия клавишей 1, 2, F5 (refresh) вызывают ошибку "Разрешение отклонено". Причём, даже если была загружена about:blank. Методы stop() и quit() - тоже самое.

P.S. Win7x32, если это важно

5

Re: HTA JS: объект WebBrowser

<hta:application scroll=no>
<html>
<body>
  <object id="WBobj"
   classid="clsid:8856F961-340A-11D0-A96B-00C04FD705A2" style="{width: 100%; height:100%}"
   ></object>
</body>
<script type="text/jscript" language="JScript">
    var x=document.getElementById("WBobj").object;
    x.RegisterAsBrowser=true;
    window.onload=function()
    {
        x.navigate('http://script-coding.com');
        function x::NavigateComplete2(a,b)
        {
            alert(b);
        }
    }
</script>
</html>
Я конечно далек от мысли... (с)

6 (изменено: Serge Yolkin, 2012-08-16 09:34:03)

Re: HTA JS: объект WebBrowser

smaharbA, я, наверное, невнятно формулирую свою проблему. Можно ли ПОСЛЕ того, как Ваш скрипт отработал и страница загрузилась в объект, изменить содержимое объекта из скрипта. Т.е. ПОВТОРНО вызвать метод x.navigate(), или другие методы (x.refresh(), x.stop(), x.quit())? У меня такие попытки приводят к ошибке. Вот я и хочу понять: это нормально, или я что-то делаю не так?

Добавьте в конец скрипта из Вашего примера

document.onkeydown=function(){
    if(event.keyCode==49){x.refresh();} // 1
    if(event.keyCode==50){x.navigate('http://www.ixbt.com');} // 2
    if(event.keyCode==51){x.navigate('about:blank');} // 3
}

Я рассчитывал на то, что нажатия кнопок 1, 2, 3 на клавиатуре будут вызывать соответствующие методы, изменяющие/обновляющие содержимое объекта, но этого не происходит.

7

Re: HTA JS: объект WebBrowser

Не знаю, какие то ограничения в безопасности, нужно почитать мсдн

Я конечно далек от мысли... (с)

8 (изменено: Serge Yolkin, 2012-08-16 09:49:01)

Re: HTA JS: объект WebBrowser

Чтение MSDN было первым, что я сделал после прочтения статьи на этом сайте... Про ограничения там ничего не было, но там не было и про JScript.