Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.03.16;
Скачать: CL | DM;

Вниз

Изменение текста в WebBrowser без сохранения на диск   Найти похожие ветки 

 
Artem   (2008-02-16 04:05) [0]

Подскажите, пожалуйста, как можно изменить текст htm-страницы, которая находится в ресурсах программы и которая отображается в браузере таким образом:
wb.navigate("res://"+application.exename+"/P1");

Мне надо взять вот эту "P1", найти в ней слово и заменить его на другое. Крайне нежелательно сохранять страницу на диск (требование), а сделать все "на лету".

Кто подскажет как это реализовать?

Заранее благодарю.


 
Artem   (2008-02-16 05:27) [1]

Я понял, что надо работать с браузером, как с OleObject. В моем случае удобнее использовать собственные тэги для замены. Например, <user>.

Вот таким образом выводится количество данных тэгов в документе:
showmessage(Wb.OleObject.Document.All.tags("user").length);

Но никак не пойму, как мне на место этого тэга вставить какой-либо текст?

Народ подскажите, кто работал с этим интерфейсом.


 
Artem   (2008-02-16 14:05) [2]

Никто не знает?


 
homm ©   (2008-02-16 14:33) [3]

Это называется DOM, все знают. Испоьзуй innerHTML, например:

Wb.OleObject.Document.All.tags("user").item(0).innerHTML = "Вася Пупкин";


 
Artem   (2008-02-16 14:37) [4]

Выдает Ole-ошибку


 
Artem   (2008-02-16 14:52) [5]

Пишу:
Wb.OleObject.Document.designmode:="On";
Wb.OleObject.Document.All.tags("User").item(0).innerHTML:="Пользователь";


Выдает ошибку OLE Error 800A0258


 
Artem   (2008-02-16 15:19) [6]

Подскажите, пожалуйста, как одолеть этого зверя?


 
palva ©   (2008-02-16 17:48) [7]

Не надо делать designmode:="On";
Это делается для правки документа с клавиатуры. В таком режиме выполнение скриптов блокируется. Это если верить следующему документу:
http://msdn2.microsoft.com/en-us/library/ms533720(VS.85).aspx


 
Artem   (2008-02-16 19:16) [8]

Хоть делай, хоть не делай - все равно Wb.OleObject.Document.All.tags("User").item(0).innerHTML:="Пользователь";< /CODE> не работает


 
homm ©   (2008-02-16 19:20) [9]

> [8] Artem   (16.02.08 19:16)

Ну блин, значит по tags("User") возвращается не коллекция, а массив, и поступ к нему по квадратным скрбкам.


 
Artem   (2008-02-16 19:23) [10]

Вот так?
Wb.OleObject.Document.All.tags("user").item[0].innerHTML = "Вася Пупкин";
?

Не работает.


 
homm ©   (2008-02-16 19:26) [11]

Еще подумай.


 
homm ©   (2008-02-16 19:26) [12]

Wb.OleObject.Document.All.tags("user")[0].innerHTML = "Вася Пупкин";


 
Бегущий человек ©   (2008-02-16 19:28) [13]

>Wb.OleObject.Document.All.tags("user")[0].innerHTML = "Вася Пупкин";
    :=
? :)


 
palva ©   (2008-02-16 20:10) [14]


procedure TForm1.FormCreate(Sender: TObject);
begin
WebBrowser1.Navigate("about:111<BR><SPAN>222</SPAN><BR>333");
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 d: IHTMLDocument2;
 ec: IHTMLElementCollection;
 e: IHTMLElement;
begin
 d := WebBrowser1.Document As IHTMLDocument2;
 ec := d.all.tags("SPAN") As IHTMLElementCollection;
 e := ec.item(Unassigned, 0) as IHTMLElement;
 e.innerHTML := "Вася Пупкин";
end;


 
palva ©   (2008-02-16 20:13) [15]


> palva ©   (16.02.08 20:10) [14]

uses MSHTML;


 
homm ©   (2008-02-16 20:15) [16]

Все дело оказалось в том, что нельзя использовать проивольные теги, видимо они просто не добавляются в дом-дерево.
Код [3] верен, только имя тега замени.


 
palva ©   (2008-02-16 20:27) [17]

Произвольные тэги скорее всего добавляются, но они не имеют нужных свойств. Если, к примеру, у нас тэг А, то уже известно, что он имеет свойство href, а если тэг <BR>, то у него нет свойства innerHTML. А про тэг USER ничего не известно. Приходится делать вручную.

Можно использовать тэг SPAN включить внего атрибут id и искать тэг по атрибуту функцией GetElementById


 
homm ©   (2008-02-16 21:09) [18]

> [17] palva ©   (16.02.08 20:27)
> что он имеет свойство href, а если тэг <BR>, то у него нет
> свойства innerHTML. А про тэг USER ничего не известно.

Дело в том, что (по крайней мере в js) обращение к несуществующему полю объекта не является ошибкой, просто значение будет undefined. Ошибка здесь возникает именно потому что возвращенный undefined нельзя интерпретировать как объект и пытатся вызывать у него методы.


 
Artem   (2008-02-18 11:09) [19]

Спасибо большое за советы, попробую.


 
Artem   (2008-02-18 11:13) [20]

Пробую код [14], выдает ошибку на строке  e := ec.item(Unassigned, 0) as IHTMLElement; - говорите, что не знает что такое Unassigned


 
fufel   (2008-02-18 22:00) [21]

Вот кусок кода. меняет текст страници налету.

WebBrowser1.OleObject.document.getElementById("lright1").innerHTML:= "ja genij";

всё аботает )))


 
palva ©   (2008-02-18 22:40) [22]

> говорите, что не знает что такое Unassigned
Ну вы же знаете что это такое. Так подскажите компилятору, откуда взять эту функцию.


 
fufel   (2008-02-19 16:10) [23]

Народ, а вот теперь интересный вопрос.
как в WebBrowser1 отрубить явя скрипты?
а точнее заблочит обнавление страницы Javascrip`том



Страницы: 1 вся ветка

Текущий архив: 2008.03.16;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.013 c
2-1203341458
igroman
2008-02-18 16:30
2008.03.16
Помогите с программкой


6-1182542869
Bora_ru
2007-06-23 00:07
2008.03.16
Перехватить URL-запрос


2-1203330006
dm37
2008-02-18 13:20
2008.03.16
Построение очереди


2-1203094046
Zurn
2008-02-15 19:47
2008.03.16
Обработка интернет страниц


11-1185503288
sunwise
2007-07-27 06:28
2008.03.16
Гуру подскажите плиз, а как средствами KOL удалить папку?