C++ Builder 不管是 VCL 或 FireMonkey,都有 TWbeBrowser 元件。在 Windows 系統下,該元件就是一個內嵌的 IE。
其實我很想不要用 IE,希望找到內嵌的 chrome 元件,但目前找到的好像不是很好處理,也擔心日後升級問題,所以在 Windows 下還是暫時先以 IE 為主。
查了說明文件,指出內建的 TWebBrowser 預設的版本是 IE 7。所以我寫了一個很簡單的程式,用 FireMonkey 版的 TWebBrowser,直接連到一個 HMLT5 的網頁
https://www.w3schools.com/html/tryit.asp?filename=tryhtml5_video
這個網頁我在 IE 上測試,要 IE 11 才能順利執行。
底下是我的測試程式執行結果,可以看到就是沒有什麼結果。
接著要修改內嵌 IE 的版本,方法就是直接修改 Windows 的登錄檔。
【手動修改】
簡單來說,就是在登錄檔的這個位置
HKEY_LOCAL_MACHINE (or HKEY_CURRENT_USER) \SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BEHAVIORS\
在此目錄下加入一組 DWOD,名稱就是你的程式,內容是十進位的 11001。這是要設定成 IE 11 的版本,但前提你的電腦中要有安裝才會有作用。
詳細說明可以參考 MSDN,裡面有各種版本的設定值。
https://msdn.microsoft.com/en-us/library/ee330730(v=vs.85).aspx#browser_emulation
在我自己的實驗中,加在 HKEY_LOCAL_MACHINE 是沒有作用的,還花了我不少時間測試,後來改在這層 HKEY_CURRENT_USER 才成功。
底下是修改後的執行畫面,順利成功了。
【程式修改】
手動修改是很麻煩的,也不能要求使用者自己做這件事。幸好在文件中有找到一個自動修改的程式,試了也可以順利執行。
程式碼詳見底下網頁的下方。
http://docwiki.embarcadero.com/Libraries/Tokyo/en/FMX.WebBrowser.TWebBrowser
抄一份起來備用,別忘了要 include <System.Win.Registry.hpp>
void __fastcall TForm1::FormCreate(TObject *Sender) { SetPermissions(); } void __fastcall TForm1::SetPermissions() { #ifdef _Windows UnicodeString cHomePath = "SOFTWARE"; UnicodeString cFeatureBrowserEmulation = "Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_BROWSER_EMULATION\\"; int cIE11 = 11001; UnicodeString sKey = ExtractFileName(ParamStr(0)); TRegIniFile *Reg = new TRegIniFile(cHomePath); __try { TRegistry *reg1 = dynamic_cast(Reg); if (Reg->OpenKey(cFeatureBrowserEmulation, true) && !(reg1->KeyExists(sKey) && reg1->ReadInteger(sKey)== cIE11)) { reg1->WriteInteger(sKey, cIE11); } } __finally { Reg->Free(); } #endif }
事實上,我就是手動修改登錄檔一直失敗,後來才發現這個程式就是在做這件事,執行後果然成功了。再去反查登錄檔,才得知是記錄在 HKEY_CURRENT_USER 這一層。
- 瀏覽次數:13824
發表新回應