Подтвердить что ты не робот

Управление WebBrowser и ошибки JavaScript

Когда я обращаюсь к странице с браузером (ie9), браузер показывает ОК.

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

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

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

Спасибо.

4b9b3361

Ответ 1

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

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/

Ответ 2

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

webBrowser1.ScriptErrorsSuppressed = true;

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

Ответ 3

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

Вы можете настроить реестр, используя следующий код С# (который устанавливает режим 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);
}

Ответ 4

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

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

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

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

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

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

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

Ответ 5

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

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

Ответ 6

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

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

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

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

Грьего