|
|
|
Junior Member
      
участник
Last Login: 14.02.2004 15:15
Сообщ.: 12,
Visits: 133
|
|
из контрола WebBrowser? Пробовал WebBrowser1.Document.frames(0).Document.documentElement.innerHTML, не помогает: access denied... При этом элемент frames(0) точно есть.
|
|
|
|
|
Supreme Being
      
модератор
Last Login: 13.12.2007 18:51
Сообщ.: 3 047,
Visits: 33 391
|
|
Странно. Вот такой код работает:
Private Sub Form_Load() WebBrowser1.Navigate "http://mopsclassika.narod.ru/index.html" Do Until WebBrowser1.ReadyState = READYSTATE_COMPLETE DoEvents Loop Debug.Print WebBrowser1.Document.frames(0).Document.documentElement.innerHTML End Sub
(нашёл в Сети какую-то страничку с фреймами - на Narod.Ru)
Но если не дождаться окончания загрузки странички, то ругань будет - правда, не про "access denied", а "Object variable or With block variable not set", т.к. WebBrowser1.Document не существует, пока окончательно не загрузится.
ВРОДЕ БЫ (но я не уверен) ваша ошибка бывает, когда в фрейме есть ссылка на другой домен...
While (!Life.EOF) { You.Money ++; You.Girls.Add(new Girl(90,60,90)); BeHappy(); }
|
|
|
|
|
Supreme Being
      
модератор
Last Login: 13.12.2007 18:51
Сообщ.: 3 047,
Visits: 33 391
|
|
Да, тут ничего не поделаешь - это специальная политика MS по обеспечению "cross-frame security" (см. MSDN). Когда вышеприведённый код "споткнётся" на строчке "Debug.Print ..." с ошибкой "Access denied", не останавливайте выполнение кода, а выберите "Debug", включите отображение окна "Watches", затем в той строчке выделите "WebBrowser1.Document.frames(0)" и перетащите его мышью в окно "Watches". Затем разверните "плюсик", чтобы увидеть объектную модель этого "WebBrowser1.Document.frames(0)" - и вы увидите, что там практически на всех элементах будет "Access denied" или "Permission denied".
Наверное, есть только один выход: st = WebBrowser1.Document.body.innerHTML затем - обычный текстовый парсинг для выделения из st куска, заключённого между <FRAMESET> и </FRAMESET>, и так далее...
While (!Life.EOF) { You.Money ++; You.Girls.Add(new Girl(90,60,90)); BeHappy(); }
|
|
|
|
|
Junior Member
      
участник
Last Login: 14.02.2004 15:15
Сообщ.: 12,
Visits: 133
|
|
Хороший метод изучить объектную модель :))) Я и не знал, что так можно :) Попробовал изменить WebBrowser1.Document.domain, чтобы обойти "cross-frame..." - не получается, хотя нигде и не написано, что он read only :(
>текстовый парсинг куска, заключённого между <FRAMESET> и </FRAMESET>, и так далее... А что "и так далее"? Содержимого фреймов там же все равно нет, только ссылки... А по новой скачивать не хочется, хотя, в принципе, это выход. Еще один выход - в кэше поискать... Но хотелось бы покрасивше сделать. :) Да и возни много с кэшем...
Но интересно вот что: при клике правой кнопкой в области фрейма "Просмотр в виде HTML" открывается блокнот с содержимым фрейма. Как-то же он это делает, откуда-то же берет это содержимое, как-то оно передается... Интересно, как?... Может быть, через OLE можно? Только как?
|
|
|
|
|
Supreme Being
      
участник
Last Login: 07.04.2005 12:23
Сообщ.: 193,
Visits: 2 124
|
|
| Как-то приходилось решать подобную задачу, но там HTML-код был "правильным" и я открывал его как XML без DTD, затем getElementsByTagName получал коллекцию нужных мне элементов (для данного случая "FRAMESET"). Потом брал .xml (точно не помню, входят ли строки "<FRAMESET>" и "</FRAMESET>" в это свойство, но отсечь-то их не трудно) для каждого узла и спокойно загружал его в WebBrowser. Хотя быстродействие и не требовалось, код получился достаточно шустрый.
|
|
|
|
|
Supreme Being
      
участник
Last Login: 07.04.2005 12:23
Сообщ.: 193,
Visits: 2 124
|
|
2 Comanche Приведенный тобой код у меня работает. И в Watch всё OK! Интересные тараканы :)
|
|
|
|
|
Supreme Being
      
модератор
Last Login: 13.12.2007 18:51
Сообщ.: 3 047,
Visits: 33 391
|
|
2t-80: А ты открой в Блокноте эту htm-страничку про мопсов и во всех трёх фреймах (чтоб наверняка :)) ) измени SRC на http://www.rambler.ru, http://www.mail.ru и т.п. Сохрани, и уже после этого посмотри, что у тебя будет в Watches!
Так что тараканов тут нет. Есть cross-frame security, а это похлеще будет ;-)
While (!Life.EOF) { You.Money ++; You.Girls.Add(new Girl(90,60,90)); BeHappy(); }
|
|
|
|
|
Supreme Being
      
участник
Last Login: 07.04.2005 12:23
Сообщ.: 193,
Visits: 2 124
|
|
Прошу прощения что невнимательно читаю. Кроме текстового парисинга можно попробовать поискать элементы FRAMESET, FRAME... и в атрибутах каждого найденного поискать атрибут "SRC"... ", и так далее" :))) Работать через DOM будет медленней, чем работа со строками (зато понтов больше:)!), но полезно попробовать и так и эдак :)) Все что выше, считать ИМХО :))
|
|
| |