delphi twebbrowser在加载之前修改html

时间:2014-06-01 00:34:27

标签: delphi twebbrowser

是否可以在浏览器中加载/执行之前修改html?

要将功能添加到我无法控制的网站,我想将javascript从原始版本更改为我自己的版本。

例如:在html浏览器加载中我想改变:

<script src="/java.js" type="text/javascript"></script>  
to:
<script src="http://mysite/java.js" type="text/javascript"></script>  

我不能只加载我自己的页面,因为我需要登录该网站才能使用它,并且该网站使用cookie来检查我是否已登录。


我加载修改后的代码如下:

Var
  aStream     : TMemoryStream;

begin

if Assigned(WebBrowser1.Document) then 
begin       
aStream := TMemoryStream.Create;

try
     aStream.LoadFromFile(Root + 'main.htm');
     aStream.Seek(0, soFromBeginning);
     (WebBrowser1.Document as IPersistStreamInit).Load(TStreamAdapter.Create(aStream));
  finally
     aStream.Free;
     Timer1.Enabled := True;
  end;
  HTMLWindow2 := (WebBrowser1.Document as IHTMLDocument2).parentWindow;
end;

这曾经有用,但该网站添加了一个登录,现在请求javascript确实被拒绝访问。我在加载自己的代码之前尝试导航到登录和登录,但我仍然拒绝访问。

3 个答案:

答案 0 :(得分:1)

在VCL,是的。您可以自己下载HTML并根据需要进行修改(如果HTML包含相对链接,则需要在<base href>中插入指定原始URL的<head>标记。然后在浏览器中导航至about:blank,查询其Document IPersistStreamInit界面,并调用其load()方法,并使用VCL&#39; s将修改后的HTML传递给它{1}}和TStringStream类。

在FMX中,我不知道。

答案 1 :(得分:0)

以下是方法:

  1. 创建可插入的MIME过滤器(请参阅IInternetProtocol)以监控HTML文档(mime类型text/html),然后由TWebBrowser呈现。
  2. 使用正则表达式替换所需内容。在您的情况下,将src="/java.js"替换为src="http://mysite/java.js"
  3. 这是code example.我强烈建议您先阅读这些文件。

    1. About Asynchronous Pluggable Protocols
    2. http://www.44342.com/webbrowser-control-f125-t489-p1.htm
    3. http://www.delphipraxis.net/60272-probleme-mit-plugable-protocol.html

答案 2 :(得分:0)

目前,通过在项目中添加另一个twebbrowser来解决问题。 (在新标签上)。此webbrowser处理登录并保持所需的php会话存活。 (只要窗户保持打开状态,它就会自动保持活动状态)。现在我可以加载我自己的修改代码而不会拒绝访问。

感谢您的帮助。