Контроль WebBrowser и ошибки JavaScript - PullRequest
20 голосов
/ 03 апреля 2011

Когда я захожу на страницу через браузер (т.е. 9), браузер хорошо отображает.

Когда я использую элемент управления WebBrowser, у меня возникают ошибки JavaScript.

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

Как я могу решить эту проблему?Могу ли я интегрировать IE9 непосредственно в форму Windows и использовать аналогичные методы, например, с помощью элемента управления WebBrowser (перемещаться, получать идентификатор, вызывать клики)?

Спасибо.

Ответы [ 6 ]

14 голосов
/ 30 августа 2011

Что бы я сделал, это назначил объект webbrowser.ObjectForScripting и затем внедрил функцию javascript, которая назначает windown.onerror оболочке, которая вызывает внешний скрипт в хост-приложении.Как:

window.onerror = function(message, url, lineNumber) 
{ 
  window.external.errorHandler(message, url, lineNumber);
}

Ссылка на: http://notions.okuda.ca/2009/06/11/calling-javascript-in-a-webbrowser-control-from-c/

9 голосов
/ 05 марта 2013

Вы можете использовать следующую строку кода, чтобы избавиться от этих типов ошибок:

webBrowser1.ScriptErrorsSuppressed = true;

Это предотвратит получение ошибок JavaScript.

8 голосов
/ 10 июня 2012

Если у вас установлен IE9, WebBrowser будет по-прежнему использовать режим IE7, если вы не переопределите это поведение параметром реестра - как описано в этом ответе StackOverflow .Это наиболее вероятная причина ошибок JavaScript, которые вы получаете в WebBrowser (потому что вы не видите те же ошибки в IE9).

Вы можете выполнить настройку реестра, используя следующий код C # (которыйустанавливает режим IE10 при обнаружении Windows 8) и изменяет app-name.exe в соответствии с вашим собственным приложением.Вы должны добавить обработчик ошибок для случая, когда недостаточно прав (для записи в этот раздел реестра требуются права администратора).

string installkey = @"SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION";
string entryLabel = "app-name.exe";
System.OperatingSystem osInfo = System.Environment.OSVersion;

string version = osInfo.Version.Major.ToString() + '.' + osInfo.Version.Minor.ToString();
uint editFlag = (uint)((version == "6.2") ? 0x2710 : 0x2328); // 6.2 = Windows 8 and therefore IE10

RegistryKey existingSubKey = Registry.LocalMachine.OpenSubKey(installkey, false); // readonly key

if (existingSubKey.GetValue(entryLabel) == null)
{
     existingSubKey = Registry.LocalMachine.OpenSubKey(installkey, true); // writable key
     existingSubKey.SetValue(entryLabel, unchecked((int)editFlag), RegistryValueKind.DWord);
}
7 голосов
/ 29 октября 2014

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

в основном, как и большинство ответов здесь - вы не можете изменить элемент управления веб-браузера, чтобы использовать самый последний движок IE. Мой использует IE7 по умолчанию, я видел некоторые ответы, которые в основном изменяют / добавляют материал в реестр, я всегда не удобен, когда дело доходит до реестра, более чистый способ решить эту проблему - добавить код на ваш сайт, который заставляет его используйте самый современный движок IE на любом компьютере и работает как шарм.

если у вас есть доступ к файлу web.config страницы, которую вы хотите просмотреть, просто добавьте:

    <system.webServer>
<httpProtocol>
    <customHeaders>
        <clear />
        <add name="X-UA-Compatible" value="IE=edge" />
    </customHeaders>
</httpProtocol>
</system.webServer>

и ваш сайт заставит веб-браузер управлять самой последней версией IE на вашем компьютере. Другие варианты можно найти здесь:

https://www.leapinggorilla.com/Blog/Read/1016/ie-ate-my-css---disabling-compatability-mode

Я должен заявить, что это будет работать только в том случае, если у вас есть доступ к странице / web.config веб-сайта / приложения, к которому вы пытаетесь получить доступ - что было в моем случае.

4 голосов
/ 03 апреля 2011

Управление WebBrowser использует IE7.Поэтому, если есть проблема, то ваш скрипт не работает для IE7, и вам придется это исправить.

Вы не можете интегрировать IE9, так как это зависит от того, установлен ли он на компьютере, и не у всех установлен IE9.

2 голосов
/ 10 апреля 2017

В качестве помощи тому, кто еще может столкнуться с этой проблемой, я попробовал все это, но у меня ничего не получалось. Вот что работает. Я не уверен, точно , что вызывает эту ошибку, но, очевидно, когда вы просто нажимаете "F5" в VS для отладки вашего приложения, он запускает YourProject.vshost.exe в качестве имени процесса. Если вы запустите то же приложение из командной строки, оно будет отображаться как YourProject.exe, и ошибки javascript исчезнут. Я думаю, что IE видит приложение, запускающее визу через VSHOST, и решает, что это подозрительно, и отключает корректную загрузку javascript.

Итак ... зайдите в настройки вашего проекта для вашего исполняемого файла. Выберите «Отладка». Выберите «Запустить внешнюю программу». Найдите и выберите Debug \ YourProgram.exe (НЕ YourProgram.vshost.exe). Сохраните, перекомпилируйте и нажмите F5.

Теперь все должно работать как обычно, а Visual Studio даже автоматически присоединяется к процессу.

Наслаждайтесь!

Grego

...