如何使用jQuery访问嵌入式ActiveX控件的方法?

时间:2011-01-20 18:22:08

标签: jquery object methods activex

我在我的页面中嵌入了一个ActiveX控件,它与打印机和LED显示器进行通信。有没有办法使用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>

我可以在jQuery之外使用JavaScript访问这些方法,但我想也许有办法使用jQuery访问这些方法。

1 个答案:

答案 0 :(得分:0)

使用jquery有什么好处?使用jQuery直接JS是完美的。 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,否则它不容易理解