У меня был успех с Object.defineProperty () , когда document.documentMode >= 9
(IE9 +).
Чтобы получить элемент управления WebBrowser в режиме IE9 +, я сначала загружаю следующий URL:
about:<!doctype html><meta http-equiv="X-UA-Compatible" content="IE=edge">
Это дает в основном пустой документ в режиме последней версии документа.
Затем, чтобы переопределить window.location
, я выполняю некоторый скрипт через eval () или document.write ():
Object.defineProperty(window, 'location', {value: {href: 'fubar'}});
Полная последовательность выглядит следующим образом:
- Загрузить элемент управления.
- Ожидание
WebBrowser.ReadyState == 4
или события DocumentComplete
.
- Звоните
document.open()
(важно).
- Оцените или напишите скрипт, переопределяющий location .
- Напишите содержание HTML.
- Call
document.close()
(обеспечивает вызов onload).
Примечание. Я использую элемент управления ActiveX WebBrowser , а не компонент .NET, являющийся оболочкой для этого элемента управления. Это, вероятно, будет работать так же в .NET.