delphi WebBrowser或EmbeddedWB调用浏览器弹出框404错误原因

FSU 2020-11-24 09:53:16
某系统中有弹出框,如果用IE浏览器或用.net封装的浏览器调用某自研系统中的弹出框则正常显示,但如果delphi WebBrowser或EmbeddedWB调用浏览器弹出框404错误原因。 在想,是否是WebBrowser或EmbeddedWB控件兼容性问题?!
...全文
363 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
FSU 2020-12-22
  • 打赏
  • 举报
回复
问题还是没有解决,不知如何是好了。
FSU 2020-12-16
  • 打赏
  • 举报
回复
@tanqth 感谢细致回答,已确认URL是一样,目前看,我怀疑是其使用的IE版本和 DELPHI WebBroser 调用的版本不一致(可能不能使用最高版本,和其版本需一致),马上来试试看。
tanqth 2020-12-16
  • 打赏
  • 举报
回复
我再查了你这问题,你这个应该是weblogic 部署后出现的情况,而且不应该是浏览器的问题。 这种问题一般就是部署的路径不对或者根本就没有部署成功。 例如:在MyEclipse下部署是显示成功的,但是通过weblogic的console登陆后根本就没有对应的项目,所以一直出现上面的问题。 而你说的“如果用IE浏览器或用.net封装的浏览器调用某自研系统中的弹出框则正常显示,但如果delphi WebBrowser或EmbeddedWB调用浏览器弹出框404错误原因” 我在想,你是不是两处使用的URL地址不同。
FSU 2020-12-15
  • 打赏
  • 举报
回复
@tanqth 注册表应该检查的是 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION 下面的吧,但里面没有我的程序名(也已经进行打包安装), 急需解决,可便留个联系方式,我私信您?!
tanqth 2020-12-13
  • 打赏
  • 举报
回复
引用 4 楼 FSU 的回复:
@tanqth 您的思路值得借鉴,目前按您的思路测试验证,仍然不行。但有个.net封装的壳是正常的。
注册表里检查一下SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION项目下你自己的程序的对应值 。如果是11001,则说明使用的是高版本的IE内核。否则应该不成功的。
FSU 2020-12-13
  • 打赏
  • 举报
回复
本机IE是正常的,就是在本机通过DELPHI WEBBROWSER 打开出现这个情况
FSU 2020-12-13
  • 打赏
  • 举报
回复
@tanqth 您的思路值得借鉴,目前按您的思路测试验证,仍然不行。但有个.net封装的壳是正常的。
tanqth 2020-12-04
  • 打赏
  • 举报
回复
WebBrowser其实使用的就是本机的IE,但可能会是底版本的。你先试试用本机IE看能不能正常使用你说的网站。如果可以,则强制指定使用高版本的IE内核。 参考下面代码:


function TFrmmain.WriteAppNameToReg:Boolean;
 var
 reg:TRegistry;
 sPath,sAppName:String;
 Sver:string;
 lenver:Integer;
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);
         Sver:=GetIEVersionStr;
         lenver:=StrToInt(leftstr(Sver, Pos('.',Sver)-1));
         // if not reg.ValueExists(sAppName)then
          if lenver<=7 then
            reg.WriteInteger(sAppName,7000)
          else
          if lenver=8 then
          begin
            reg.WriteInteger(sAppName,8000)
          end
          else
          if lenver=9 then
          begin
            reg.WriteInteger(sAppName,9000)
          end
           else
          if lenver=10 then
          begin
            reg.WriteInteger(sAppName,10000)
          end
           else
          if lenver=11 then
          begin
            reg.WriteInteger(sAppName,11001)
          end;
 
 
        end;
        reg.CloseKey;
         
    finally
       FreeAndNil(reg);
    end;
function TFrmmain.GetIEVersionStr: string;
var
 Reg: TRegistry; // registry access object
begin
 Result := '';
 Reg := TRegistry.Create;
 try
    Reg.RootKey := Windows.HKEY_LOCAL_MACHINE;
 if Reg.OpenKeyReadOnly('Software\Microsoft\Internet Explorer') then
 begin
  //这儿新版本IE的取值位置不同所以要判断 <br> if Reg.ValueExists('svcVersion') then
    Result := Reg.ReadString('svcVersion') 
   else
   if Reg.ValueExists('Version') then
    Result := Reg.ReadString('Version');
 end;
 finally
   Reg.Free;
 end;
end;
function TFrmmain.IsWin64:Boolean;<br>//这个是别人写好的,不记得原出处了,见凉
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;
FSU 2020-12-03
  • 打赏
  • 举报
回复
一行代码都不需要,这个控件能够自动打开WEB
绍兴老鼠 2020-11-26
  • 打赏
  • 举报
回复
代码呢.....

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧