Как заблокировать флэш-элементы в элементе управления веб-браузера - PullRequest
2 голосов
/ 17 января 2012

Я создаю приложение на C # с элементом управления WebBrowser и пытаюсь найти способ заставить флэш-контент на веб-странице не отображаться, поскольку он высасывает тонну измой процессор и память.Я пытался удалить тег <object> на странице (есть только один), получив его через browser.Document.GetElementsByTagName ("object") и установив его externalHtml в пустую строку.Он возвращает один элемент (подтверждается свойством Count), но доступ к первому элементу ([0]) дает индекс ошибки вне диапазона.Я пытался сделать это с помощью цикла foreach, но ничего не происходит и ошибок нет.Если я пытаюсь получить элементы <div> вместо элементов <object>, цикл foreach запускается.Я что-то здесь не так делаю, есть ли ошибка, или есть лучший способ удалить флэш-контент?Любая помощь с благодарностью.

Мой код:

HtmlElementCollection flashElements = webBrowser.Document.GetElementsByTagName("object");
foreach (HtmlElement element in flashElements)
{
  element.OuterHtml = "";
  MessageBox.Show("Deleted");
}

Кстати, это выполняется после Событие DocumentCompleted было запущено.

РЕДАКТИРОВАТЬ: Я только что понял, что во время вызова события DocumentCompleted оно вызывается до того, как JavaScript внедряет флэш-контент на страницу.Я попробовал несколько «спящих» методов, но все они также мешают обработке веб-страницы.Можно ли ждать больше времени (5 секунд или около того), пока веб-страница продолжает отображаться?

Ответы [ 2 ]

1 голос
/ 28 января 2012

Вариант 1. Вы можете использовать System.Threading.Timer, чтобы попытаться подождать дополнительное время для динамически внедренной Flash.Это не должно препятствовать работе WebBrowser, пока вы ждете.

Вариант 2: Попробуйте что-то вроде FiddlerCore (вы бы добавили это в свое приложение), privoxy (это будет работать за пределами вашего приложения на вашем локальном компьютере) или какого-либо другого прокси, чтобы фактически блокировать доступ содержимого Flash (.swf) к вашему локальному компьютеру.С FiddlerCore вы будете отслеживать каждый веб-запрос / ответ и уничтожать запрос / ответ, например, на основе типа содержимого HTTP.Эта опция может привести к попаданию ЦП / памяти в прокси-сервер в сети, но все же, вероятно, она меньше, чем сама Flash.

0 голосов
/ 28 января 2012

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

например

swfobject.embedSWF = function(){}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...