Как получить доступ к методам встроенного элемента управления ActiveX с помощью jQuery? - PullRequest
0 голосов
/ 20 января 2011

Я добавил на свою страницу элемент управления ActiveX, который связывается с принтером и светодиодным дисплеем. Есть ли способ получить доступ, используя jQuery, к методам, доступным в элементе управления AX? Например:

 $("#plugin").updateDisplay("COM6:", "test");
 $("#plugin").printReceipt("COM5:", "\x0a\x0a\x1dV\x42\x00");
 $("#plugin").openDrawer();

Я знаю, что вышеупомянутое не работает, но есть ли подобный способ сделать эквивалент с использованием jQuery?

Также встроенный код выглядит так:

<object id="plugin" type="application/x-ticket" width="1" height="1">
<param name="onload" value="pluginLoaded" /></object>

Я могу получить доступ к методам с помощью JavaScript вне jQuery, но я подумал, что, возможно, есть способ доступа к методам с помощью jQuery.

1 Ответ

0 голосов
/ 20 января 2011

Какую выгоду вы получаете от использования jquery?Совершенно нормально использовать прямой JS с jQuery.document.getElementById('plugin').updateDisplay('blah', 'bleh').Но если вы действительно хотите, вы можете создать плагин.

jquery.fn.updateDisplay = function(a, b) {
  this.each(function(index, el){
    el.updateDisplay(a, b);
  });
  return this;
}

//... and so on

Вот общий способ сделать это:

function convertMethodsTojQuery(/* methodName1, methodName2, ...*/) {

  // In some browsers (*cough* IE *cough*), the methods of DOM 
  // objects are not real JavaScript Functions and don't
  // support the apply method. Borrow Function's apply.
  var apply = Function.prototype.apply;

  for (var i=0; i < arguments.length; i++) {
    var methodName = arguments[i];
    jQuery.fn[methodName] = (function(name) {
      return function() {
        // Save arguments so it's available in the inner looping closure
        var args = arguments;
        this.each(function(index, el){
          apply.call(el[name], el, args); 
        });
      }        
    })(name);
  }
}

// Call it like
convertMethodsTojQuery("updateDisplay", "printReceipt", "openDrawer")

Общий метод довольно сложен (заимствование Function.prototypeи самостоятельно вызывающие функции для изоляции циклической переменной), так что это будет нелегко понять, если у вас нет хорошего понимания JavaScript

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...