delphi中WEBBrowser網頁html相互調用(一)


1、基本操作
1.1、激活

var doc,url:Olevariant ;
begin
url:='about:blank' ;//或者一個有實際意義的url
WebBrowser1.Navigate2(url);//這樣就激活了!
end;

1.2、寫HTML代碼

var doc:Olevariant ;
s:string;
begin
doc:=WebBrowser1.Document;
doc.clear;//清楚緣由內容,以便寫新內容
doc.write('<html>');
//其它代碼
doc.write('</html>');
doc.close;//這樣就生效了!
end;

1.3、獲得HTML文本

var doc:Olevariant ;
s:string;
begin
doc:=WebBrowser1.Document;
s:=doc.documentElement.outerHTML;//s里就是HTML文本了
//處理s就行了
end;

2、中級操作
2.1、獲得其中HTML元素的值

var doc:olevariant;
s:string;
begin
doc:=WebBrowser1.Document;
s:=doc.all.btn.value;
end;

2.2、改寫其中HTML元素的值

var doc:olevariant;
begin
doc:=WebBrowser1.Document;
doc.all.btn.value:='123123';
end;

3、高級操作
3.1、觸發其中HTML元素的事件

var doc:olevariant;
begin
doc:=WebBrowser1.Document;
doc.all.btn.onclick;
end;

3.2、讓其中的元素執行webbrowser之外的delphi代碼
本來,這有很復雜的解決辦法,但那部分屬於ATL的知識比較難掌握,因此繞了一下:
讓那些需要執行delphi的HTML元素,調用一個函數叫做triggerExEvent,參數是HTML元素的名稱,然后是若干參數。
triggerExEvent是javascript函數,有不確定個參數,但第一個肯定是表示元素的名稱。 triggerExEvent將參數組成字符串,然后前面冠以"#OnTriggerExEvent:",作為url,然后導航。
在webbrowser的onNavigator2事件里,判斷url中是否包含"#OnTriggerExEvent:",如果包含怎作如下處理:
a、cancel這次導航;b、將"#OnTriggerExEvent:"之后的信息截取,作為參數傳遞給webbrowser的新增一個事件OnTriggerExEvent事件,其參數有兩個:1、控件名稱;2、一個字符串參數。
這樣,用戶可以在OnTriggerExEvent事件里處理HTML的點擊等事件了
例如,我為webbrowser派生新類,叫做webbrowserEx,它有一個事件叫做OnTriggerExEvent
有個js文件包含這樣的函數:

function triggerExEvent(cmpnt_id,event_nm,optionstr)
{url='#triggerExEvent:id=';
url=url+cmpnt_id+';eventnm='+event_nm;
if(optionstr) url=url+';params=optionstr';
location=url;}

在HTML文本里可以這樣寫:

<input type="button" name="Submit" value="按鈕" onClick="triggerExEvent('Submit','click',null);">

這樣,點擊網頁里的按鈕時,會觸發delphi寫的代碼,這些代碼根據傳遞過來的參數,再進行調用其它合適的事件,也可以讓webbrowserEx自動尋找合適的事件來觸發,只有尋找不到時才去找JS的方法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM