Как я подавляю ошибки сценария при использовании управления WPF WebBrowser?

порты = уши, рот, глазное яблоко, касание
протоколы = английский, испанский, язык жестов, Шрифт Брайля

47
задан willem 19 August 2009 в 07:14
поделиться

3 ответа

Проблема в том, что WPF WebBrowser не реализовал это свойство, как в элементе управления 2.0.

Лучше всего использовать WindowsFormsHost в приложении WPF и используйте свойство 2.0 WebBrowser : SuppressScriptErrors . Даже в этом случае для этого вам понадобится приложение, которое будет полностью доверять.

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

7
ответ дан 26 November 2019 в 19:14
поделиться

Вот решение, которое я только что сделал с помощью отражения. Решает проблему :) Я запускаю его при событии Navigated, поскольку, похоже, объект activeX недоступен до этого момента.

Что он делает, так это устанавливает свойство .Silent на базовом объекте activeX. Это то же самое, что и свойство .ScriptErrorsSuppressed, которое является эквивалентом Windows forms.

 public void HideScriptErrors(WebBrowser wb, bool Hide) {
    FieldInfo fiComWebBrowser = typeof(WebBrowser).GetField("_axIWebBrowser2", BindingFlags.Instance | BindingFlags.NonPublic);
    if (fiComWebBrowser == null) return;
    object objComWebBrowser = fiComWebBrowser.GetValue(wb);
    if (objComWebBrowser == null) return;
    objComWebBrowser.GetType().InvokeMember("Silent", BindingFlags.SetProperty, null, objComWebBrowser, new object[] { Hide });
 }

Лучшая версия, которая может быть запущена в любое время, а не после события .Navigated:

public void HideScriptErrors(WebBrowser wb, bool hide) {
    var fiComWebBrowser = typeof(WebBrowser).GetField("_axIWebBrowser2", BindingFlags.Instance | BindingFlags.NonPublic);
    if (fiComWebBrowser == null) return;
    var objComWebBrowser = fiComWebBrowser.GetValue(wb);
    if (objComWebBrowser == null) {
        wb.Loaded += (o, s) => HideScriptErrors(wb, hide); //In case we are to early
        return;
    }
    objComWebBrowser.GetType().InvokeMember("Silent", BindingFlags.SetProperty, null, objComWebBrowser, new object[] { hide });
}

Если возникли проблемы со вторым примером, попробуйте поменять wb.Loaded на wb.Navigated.

124
ответ дан 26 November 2019 в 19:14
поделиться

У меня была эта проблема в прошлом, и, наконец, я решил ее с помощью внедрения сценария Javascript, подавляющего обработку ошибок. Надеюсь, это поможет и вам.

Отключить ошибки Javascript в WEbBrowsercontrol

2
ответ дан 26 November 2019 в 19:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: