Как обработать событие ActiveX в JavaScript

20
задан Community 23 May 2017 в 10:31
поделиться

6 ответов

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

<script for="MyControl" event="ReceiveMessage(msg)">
    alert(msg);
</script>
13
ответ дан 30 November 2019 в 00:40
поделиться

Хорошо, но если Вы используете C# (.NET 2.0) с наследованным UserControl (ActiveX)... Единственный способ заставить его работать путем "Расширения" функциональности обработчика события: http://www.codeproject.com/KB/dotnet/extend_events.aspx?display=Print

вышеупомянутая ссылка проекта от нашего друга г-на Werner Willemsens сохранила мой проект. Если Вы не делаете этого, JavaScript не может связать с обработчиком событий.

Он использовал "расширение" сложным способом из-за примера, который он выбрал, но если Вы делаете это простым, присоединяя дескриптор непосредственно к самому событию, это также работает. ActiveX C# должен поддерживать "ScriptCallbackObject" для привязки события с функцией JavaScript как ниже:

  var clock = new ActiveXObject("Clocks.clock");
  var extendedClockEvents = clock.ExtendedClockEvents();
  // Here you assign (subscribe to) your callback method!
  extendedClockEvents.ScriptCallbackObject = clock_Callback; 
  ...
  function clock_Callback(time)
  {
    document.getElementById("text_tag").innerHTML = time;
  }

, Конечно, необходимо реализовать IObjectSafety и другой материал безопасности, чтобы заставить его работать лучше.

5
ответ дан 30 November 2019 в 00:40
поделиться

Я нашел этот код работами в теге form. В этом примере обратный вызов является параметром функции, переданным в JavaScript к элементу управления ActiveX, и callbackparam является параметром события обратного вызова, сгенерированного в элементе управления ActiveX. Таким образом, я использую тот же обработчик событий для любых типов событий, вместо того, чтобы попытаться объявить набор отдельных обработчиков событий.

<object id="ActivexObject" name="ActivexObject" classid="clsid:15C5A3F3-F8F7-4d5e-B87E-5084CC98A25A"></object>

<script>
function document.ActivexObject::OnCallback(callback, callbackparam){
callback(callbackparam);
}
</script>

1
ответ дан 30 November 2019 в 00:40
поделиться

Если у Вас есть элемент ActiveX на Вашей странице, которая имеет идентификатор 'MyControl' затем, Ваш синтаксис обработчика JavaScript - это:

function MyControl::ReceiveMessage(msg)
{
   alert(msg);
}
1
ответ дан 30 November 2019 в 00:40
поделиться

Я думаю что MyControl:: пример ReceiveMessage не работает, потому что элемент управления ActiveX выставляется с другим именем или в другом объеме.

С примером GetControl:: ReceiveMessage, я полагаю, что функциональное определение анализируется, прежде чем ссылка GetControl устанавливается, таким образом это не относится к доступному объекту и не может связать функцию с объектом.

я принялся бы за решение этой проблемы при помощи отладчика сценариев MS и пытающийся определить, существует ли ссылка по умолчанию для управления с другим именем или в другом объеме (возможно как ребенок формы). Если можно определить корректную ссылку для управления, необходимо смочь связать функцию правильно с Автоволшебством:: метод, который указывает статья MSDN.

Еще одна мысль, ссылка может быть основана на названии объекта а не идентификатора, так попытайтесь установить обоих :)

0
ответ дан 30 November 2019 в 00:40
поделиться

Раньше я использовал activex в своих приложениях. Я помещаю теги объекта в форму ASP.NET, и у меня работает следующий код JavaScript.

function onEventHandler(arg1, arg2){
    // do something
}

window.onload = function(){
    var yourActiveXObject = document.getElementById('YourObjectTagID');
    if(typeof(yourActiveXObject) === 'undefined' || yourActiveXObject === null){
        alert('Unable to load ActiveX');
        return;
    }

    // attach events
    var status = yourActiveXObject.attachEvent('EventName', onEventHandler);
}
8
ответ дан 30 November 2019 в 00:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: