【问题标题】:Get, a good encoded URL for TChromium获取,一个很好的 TChromium 编码 URL
【发布时间】:2016-05-23 10:10:56
【问题描述】:

TWebBrowser 基于 Internet Explorer 的 URL 没有加密,例如我可以简单地去:

path:='file:///C:/##Project/Page.html
WebBrowser1.Navigate(path);

但是,对于TChromium,组件 URL 编码如下:

path:='file:///D:/%23%23Project/Page.html
chrm1.Browser.MainFrame.LoadUrl(path);

这是一个问题,因为在程序中我使用以下方法创建路径(URL):

path := ExtractFilePath(Application.ExeName)+ 'Page.html';

而且 chromium 无法识别路径,因为它没有正确编码。

【问题讨论】:

    标签: delphi chromium chromium-embedded twebbrowser


    【解决方案1】:

    更新:

    我安装了 DCEF3,以下内容适用于 GuiClient 演示中的特定路径:

      Path := StringReplace(Path, '#', '%23', [rfReplaceAll]);
      crm.Browser.MainFrame.LoadUrl(Path);
    

    我也试过

    Path := TIdURI.UrlEncode(Path);
    

    但这使路径值保持不变(在 D7 中)。因此,对于比我的 StringReplace 更通用的解决方案,您可能想看看 q Hugh Jones 给出的链接中的一些答案,

    stackoverflow.com/questions/776302/standard-url-encode-function

    [原创]

    我没有安装 DCEF3 来检查,但看起来你需要这样做

    path := ExtractFilePath(Application.ExeName)+ 'Page.html';
    path := HttpEncode(Path);
    chrm1.Browser.MainFrame.LoadUrl(path);
    

    将 HttpApp 添加到您的 Uses 之后。

    【讨论】:

    • 使用path := HttpEncode(Path)后,将整个字符串编码为所有斜线的.etc。我收到D%3A%5C%23%23Project%5C'Page.html 并且 TChromium 无法读取 URL
    • 因为没有办法切割字符串,并且编码切割值。
    • 可能是我的记忆错误。试试 HTMLEncode() 看看是否可行。
    • HtmlEncode() return C:\##Projekt\Page.html 不格式化 URL。
    【解决方案2】:

    编码上面的函数可以工作,但它们的编码方式不同。

    Tchromium 需要一个非常具体的、足够具体的以不创建典型功能。

    HttpEncode 几乎可以完美运行,但会编码特殊字符,例如 +、- 等。

    我尝试作者的功能: stackoverflow.com/questions/776302/standard-url-encode-function

    我试试

    function MyEncodeUrl(source: string): string;
    
    var i:integer;
     begin
       result := '';
       for i := 1 to length(source) do
           if not (source[i] in ['A'..'Z','a'..'z','0','1'..'9','-','_','~','.']) then result := result + '%'+inttohex(ord(source[i]),2) else result := result + source[i];
     end;
    

    但是,我在'/'之间的片段上使用了上述函数,例如:

     path := ExtractFilePath(Application.ExeName) ;
    
    
       function GenerateURL(path: string): string;
              var after,temp: string;
        begin
              path:= ExtractFilePath(Application.ExeName);
              after:=Copy(path,1,4);
              Delete(path,1,3);
    
    
              while (Pos('\',path)>0 )do
    
              begin
    
                        wynik:=Copy(path,1,Pos('\',path)-1);
    
                            if Length(temp)<>0 then
                              temp:=MyEncodeUrl(temp)+'\';
    
                        Insert(temp,after,Length(s));
                        Delete(path,1,Pos('\',path))
              end ;
    
       Delete(after,(Length(after)),1);
       Result := StringReplace(after, '\', '/', [rfReplaceAll]);
       end;
    

    在上述函数之后,我只是添加 URL 函数的开头和结尾:

     URL := 'file:///' + GenerateUrl(path)+ 'page.htm';
    

    感谢大家的帮助

    【讨论】:

      猜你喜欢
      • 2021-11-15
      • 2011-05-25
      • 2016-02-14
      • 2010-10-21
      • 1970-01-01
      • 2021-12-13
      • 1970-01-01
      • 1970-01-01
      • 2011-05-04
      相关资源
      最近更新 更多