Webbrowser指定IE核心版本(更改登錄檔)
1:WebBrowser 響應回車Enter鍵(相容Silverlight)
在Form放置一個ApplicationEvents控制元件,
在OnMessage事件中寫下面的程式碼:
uses ActiveX procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean); const StdKeys = [VK_TAB, VK_RETURN, VK_DELETE, VK_BACK]; { standard keys } ExtKeys = [VK_LEFT, VK_RIGHT]; { extended keys } fExtended = $01000000; { extended key flag } begin Handled := False; with Msg do if ((Message > = WM_KEYFIRST) and (Message <= WM_KEYLAST)) and ((wParam in StdKeys) or {$IFDEF VER120}(GetKeyState(VK_CONTROL) < 0) or {$ENDIF} (wParam in ExtKeys) and ((lParam and fExtended) = fExtended)) then try if IsChild(WebBrowser1.Handle, hWnd) then { handles all browser related messages } begin with WebBrowser1.Application as IOleInPlaceActiveObject do Handled := TranslateAccelerator(Msg) = S_OK; if not Handled then begin Handled := True; TranslateMessage(Msg); DispatchMessage(Msg); end; end; except end; end;
2: 如果電腦上安裝了IE8或者之後版本的IE瀏覽器,Webbrowser控制元件會使用IE7相容模式來顯示網頁內容。解決方法是在登錄檔中為你的程序指定引用IE的版本號。
比如我的程式叫做a.exe
對於32位程式
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION
對於64位程式
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION
在對應的路徑下新增你程式名字,如a.exe為名的value,DWORD值。
值選項:
10000(0×2710) IE10
9999 (0x270F) IE9 忽略html5
9000 (0×2328) IE9
8888 (0x22B8) IE8 忽略html5
8000 (0x1F40) IE8
7000 (0x1B58) IE7
3: 遮蔽指令碼錯誤
1.什麼是javascript指令碼錯誤
1.1 概述
JavaScript指令碼錯誤包含“執行時錯誤”和“語法錯誤”。
1.2 JavaScript“語法錯誤”
JavaScript語法錯誤是指當 JavaScript語句違反了 JavaScript指令碼語言的一條或多條語法規則時導致的錯誤。JavaScript語法錯誤發生在程式編譯階段,在開始執行該程式之前。
1.3 JavaScript“執行時錯誤”
JavaScript執行時錯誤是指當 JavaScript指令碼試圖執行一個系統不能執行的動作時導致的錯誤。當正在執行指令碼、計算變量表達式、或者正在動態分配記憶體時出現 JavaScript執行時錯誤時。
2. 為什麼要遮蔽javascript指令碼錯誤?
由於開發海納產品時,使用WebBrowser和CHtmlView來展示頁面,進行填表等操作;但是由於開啟的頁面大多是其他使用者的CMS頁面,所以難免有些有指令碼錯誤,於是決定要來遮蔽指令碼錯誤,提升產品的易用性和友好性。
3. 怎麼去遮蔽javascript指令碼錯誤?
3.1 使用SetSilent函式
使用WebBrowser或CHtmlView的SetSilent函式可以達到遮蔽指令碼錯誤的目的,不過這種情況,其它提示資訊也都不顯示了,例如使用alert進行的錯誤提示。
如果你覺得這樣能滿足你,那麼推薦使用這種方法,簡單啊!
3.2 過載IOleCommandTarget的Exec函式