解决Delphi WebBrowser 无法调用当前浏览器的版本 复制代码

【转】解决Delphi WebBrowser 无法调用当前浏览器的版本 复制代码

delphi 下调用WEBBROWSER,很多时候会提示JS出错,导致页面无法正常打开。而在电脑上直接用IE是可以正常打开的。这可能是因为DELPHI的WEBBROWSER版本与系统的IE版本不同。用下面代码可解决,但需要使用管理员运行软件。另外,程序里WEBBROWSER无法正常打开网页而IE能打开时,还可搜索跨域浏览查找相关资料。
procedure TregedtIE.FormCreate(Sender: TObject);  
begin  
  WriteAppNameToReg;  
  WebBrowser1.Navigate('C:\a.html');  
end;  
{--}  
{需要注意是GetNativeSystemInfo 函数从Windows XP 开始才有, 
 而 IsWow64Process 函数从 Windows XP with SP2 以及 Windows Server 2003 with SP1 开始才有。 
 所以使用该函数的时候最好用GetProcAddress 。 
}  
function TregedtIE.IsWin64: Boolean;  
var  
  Kernel32Handle: THandle;  
  IsWow64Process: function(Handle: Windows.THandle; var Res: Windows.BOOL): Windows.BOOL; stdcall;  
  GetNativeSystemInfo: procedure(var lpSystemInfo: TSystemInfo); stdcall;  
  isWoW64: Bool;  
  SystemInfo: TSystemInfo;  
const  
  PROCESSOR_ARCHITECTURE_AMD64 = 9;  
  PROCESSOR_ARCHITECTURE_IA64 = 6;  
begin  
  Kernel32Handle := GetModuleHandle('KERNEL32.DLL');  
  if Kernel32Handle = 0 then  
    Kernel32Handle := LoadLibrary('KERNEL32.DLL');  
  if Kernel32Handle <> 0 then  
  begin  
    IsWOW64Process := GetProcAddress(Kernel32Handle,'IsWow64Process');  
    GetNativeSystemInfo := GetProcAddress(Kernel32Handle,'GetNativeSystemInfo');  
    if Assigned(IsWow64Process) then  
    begin  
      IsWow64Process(GetCurrentProcess,isWoW64);  
      Result := isWoW64 and Assigned(GetNativeSystemInfo);  
      if Result then  
      begin  
        GetNativeSystemInfo(SystemInfo);  
        Result := (SystemInfo.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_AMD64) or  
                  (SystemInfo.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_IA64);  
      end;  
    end  
    else Result := False;  
  end  
  else Result := False;  
end;  
{--}  
function TregedtIE.WriteAppNameToReg: Boolean;  
var  
  reg :TRegistry;  
  sPath,sAppName:String;  
begin  
  Result := True;  
  reg := TRegistry.Create;  
  try  
    reg.RootKey := HKEY_LOCAL_MACHINE;  
    sPath := 'SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION';  
    if isWin64 then  
      sPath := 'SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION';  
    if reg.OpenKey(sPath,True) then  
    begin  
      sAppName := ExtractFileName(Application.ExeName);  
     if not reg.ValueExists(sAppName) then  
        reg.WriteInteger(sAppName,0);  
    end;  
    reg.CloseKey;  
  finally  
    FreeAndNil(reg);  
  end;  
end;  
{--}  
procedure TregedtIE.WebBrowser1DocumentComplete(ASender: TObject;  
  const pDisp: IDispatch; var URL: OleVariant);  
begin  
  WebBrowser1.OleObject.Document.Body.Scroll := 'no';  
  WebBrowser1.OleObject.Document.Body.style.border := 'none';  
  webbrowser1.OleObject.Document.Body.Style.margin := '0px';  
end;  
 
  


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值