Web浏览器控件无法使用attachEvent()

时间:2016-12-28 16:12:58

标签: c# winforms internet-explorer webbrowser-control

我的webbrowser控件显示一个Intranet站点。它工作正常,直到管理员更改了iis中的设置,强制ie11在边缘模式下渲染。现在我的webbrowser控件出现了脚本错误“object不支持属性或方法attachEvent。”

是的,我知道在ie11中不推荐使用attachEvent。不,我无法控制网页代码。不,我无法强制管理员再次更改设置。

我尝试在浏览器仿真下使用我的应用程序的注册表设置,使用从ie9到ie10开头的所有代码。他们都没有任何影响。

有谁能告诉我如何强制我的webbrowser控件以这样的方式呈现,以避免该脚本错误并继续登录?成功登录后必须调用对attachEvent的调用,因为当我在登录页面上使用了错误的凭据时,错误不会出现。当我的应用程序正常工作时,页面默认为9兼容性。但似乎管理员的IIS设置已经使其无效。

1 个答案:

答案 0 :(得分:0)

由于您无法更改代码,我建议实施attachEvent / detachEvent polyfill ,就像这样

HTMLElement.prototype.attachEvent = function(event, cb) {
  var onEventName = "on" + event,
    obj = this;

  if (obj.addEventListener) {
    obj.addEventListener(event, cb, false);

  } else if (obj.attachEvent) {
    obj.attachEvent(onEventName, cb);
  } else {
    var currentEventHandler = obj[onEventName];
    obj[onEventName] = function() {
      if (typeof currentEventHandler === 'function') {
        currentEventHandler.apply(obj, arguments);
      }
      cb.apply(obj, arguments);
    };
  }
};

HTMLElement.prototype.detachEvent = function(event, cb) {
  var onEventName = "on" + event,
    obj = this;

  if (obj.removeEventListener) {
    obj.removeEventListener(event, cb, false);
  } else if (obj.detachEvent) {
    obj.detachEvent(onEventName, cb);
  } else {
    delete obj[onEventName];
  }
};

这里是working plnkr demonstration(对于不使用代码段而道歉)。我使用this old git来构建此代码。

请注意代码不完整,不适用于生产,例如它不检查HTMLElement,attachEvent,detachEvent是否存在。