用慣了EmbeddedWB,不想換,可是IE內核一直存在內存泄漏問題,沒辦法,只有尋找替代品了。javascript
要把用習慣的EmbeddedWB換成徹底不同的TChromium,有點挑戰,特別是在資料很少,英語沒過三級的狀況下。將來趨勢是這樣,只有慢慢啃了。html
首先,想到的是跨域,若是不能跨域,就沒辦法替代手上的成品。TChromium的跨域比想像中的簡單,直接經過chrm.Browser.GetFrameNames(list);//list:tstringList;取得各個IFrame/Frame的名稱(所謂名稱不是指name屬性,只是一個標識,在有name時,返回name,沒有name時,ID 也行,都沒有時,自動生成一個惟一名稱),如:java
ff //這個是一個框架的IDjquery
<!--framePath //ff/<!--frame0-->--> web
<!--framePath //ff/<!--frame1-->-->跨域
<!--framePath //ff/<!--frame2-->--> //後面三個是自動生成的惟一名稱瀏覽器
獲取指定Frame時,經過chrm1.Browser.Frame['frame 的名稱'],取得ICefFrame接口,後面的操做請隨意。app
其次是填表,用過google瀏覽器的都知道,其填表功能實在強大,在webbrowser時代,通常都是獲取表單元素的各類接口,而後設置其value、checked等屬性,而在TChromium中,一切皆js,把想作的事都讓js去執行吧,因此,用TChromium,js功力深厚的會輕鬆不少了。好比:框架
strTemp := 'document.forms[0].inmembername.value="User_Name";'; JavaExec(strTemp); strTemp := 'document.forms[0].inpassword.value="Password";'; JavaExec(strTemp); strTemp := 'document.forms[0].submit.click();'; chrm.browser.Frame['ff'].ExecuteJavaScript(str,'about:blank',0);; //想在哪一層frame執行,就調用哪一層
更神奇的是,還能夠經過如下方法加載屬於本身的jquery到瀏覽器中:post
procedure TForm3.chrm1LoadEnd(Sender: TCustomChromium; const browser: ICefBrowser; const frame: ICefFrame; httpStatusCode: Integer; out Result: TCefRetval); var str:string; begin str:='var oHead = document.getElementsByTagName(''HEAD'').item(0);'#13#10+ 'var oScript = document.createElement( "script" );'#13#10+ 'oScript.language = "javascript";'#13#10+ 'oScript.type = "text/javascript";'#13#10+ 'oScript.id = "sid";'#13#10+ 'oScript.defer = true;'#13#10+ 'oScript.src = "jquery.js";'#13#10+ 'oHead.appendChild( oScript );'#13#10+ 'alert("8")' ; Frame.ExecuteJavaScript(str,'about:blank',0); end;
直接鏈接本地的js!!!這段代碼最後寫在LoadEnd中,每加載完成一個frame,就讓這個frame加載本身的jquery,若是在須要使用的時候再去加載jquery,jquery加載是須要時間的,可能會致使緊接着的js代碼不能生效。
最後,最後先到這裏,下一次再說關於彈出窗口、右鍵菜單、摸擬鼠標點擊等內容。
附:google論壇,delphi TChromium的問題討論羣組:http://groups.google.com/group/delphichromiumembedded