2016-12-28 2 views
0

Управление веб-браузером отображает сайт интрасети. Он работал нормально, пока администратор не изменил настройку в iis, которая заставляет ie11 отображать в режиме Edge. Теперь мой элемент управления webbrowser обнаруживает ошибку сценария «объект не поддерживает свойство или метод attachEvent».Управление веб-браузером не работает с attachEvent()

Да, я знаю, что attachEvent устарел в ie11. Нет, у меня нет контроля над кодом веб-страницы. Нет, я не могу заставить администратора изменить настройки снова.

Я попытался использовать параметры реестра для своего приложения в эмуляции браузера, используя все коды, начиная с ie9 до ie10. Ни один из них не имел никакого эффекта.

Может ли кто-нибудь сказать мне, как заставить мой элемент управления веб-браузером визуализировать таким образом, чтобы избежать ошибки сценария и продолжить вход в систему? Вызов метода attachEvent должен быть вызван при успешном входе в систему, потому что, когда я использовал плохие учетные данные на странице входа в систему, ошибка не возникает. Когда мое приложение работало, страница по умолчанию имела 9 совместимость. Но похоже, что параметр IIS администратора аннулировал это.

+0

Прежде всего, вы должны проверить, правильно ли отображается веб-сайт в Internet Explorer 11. Поэтому откройте IE11 от ОС и перейдите на сайт и посмотрите результат. Если он отображается правильно, значит, элемент управления «WebBrowser» также отобразит его правильно, и вы можете исправить эту проблему, правильно настроив эмуляцию браузера, как описано в [этот пост] (http://stackoverflow.com/a/38514446/3110834) , –

+0

Это не работает. Я уже пробовал, но без расширения vshost.exe. Попробовал это снова за ваше предложение, все еще не работает. Это не столько отображение, на мой взгляд, это проблема, но этот вызов attachEvent в коде веб-страницы вызывает ошибку сценария, которая не позволит мне продолжить. Возможно, мое объяснение было не таким ясным, извините. – StillANewb

+0

И он работает с обычным браузером ie11. – StillANewb

ответ

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.

Смежные вопросы