我需要使用任何语言(Delphi,C ++,C#)的DOM API将Google广告添加到页面上。 我可以使用DOM在网页中添加Adsense代码,但是随后如何触发它运行?

广告代码通常在document.load事件中运行。 我如何附上我的功能,该事件? (我也可以使用文档下载事件,但此事件与DOM不兼容。)

我需要将功能附加到document.load并且需要使用DOM功能来解析HTML代码,然后再运行Adsense Javascript代码。

===============>>#1 票数:1

使用delphi可以做到这一点:

procedure TForm1.FormCreate(Sender: TObject);
begin
  WebBrowser1.Navigate('http://stackoverflow.com');
end;

procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject; 
  const pDisp: IDispatch; var URL: OleVariant);
var
  Script: WideString;
begin
  Script := 'document.onload=alert("boo!");';
  if (pDisp as IWebBrowser) <> nil then
    ((pDisp as IWebBrowser).Document as IHTMLDocument2).parentWindow.execScript(Script, 'JScript');
end;

这也是有关使用TWebBrowser下沉事件的其他信息。 这可能对您有用。 请注意:

TEventObject = class(TDebugInterfacedObject, IDispatch)应该声明为: TEventObject = class(TInterfacedObject, IDispatch)

===============>>#2 票数:0

听起来更像是JavaScript问题。

如果使用jQuery之类的框架,所有这些操作将变得更加容易:它将使您能够轻松地从JavaScript代码访问DOM。

例如,请参阅http://docs.jquery.com/Tutorials:Getting_Started_with_jQuery ,以获取可轻松操纵页面DOM的官方教程。

这是此页面的摘录:

我们从一个空的html页面开始:

  <html> <head> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript"> // we will add our javascript code here </script> </head> <body> <!-- we will add our HTML content here --> </body> </html> 

此页面仅加载jquery.js库(确保URL指向您存储jquery副本的位置!此示例假定您将其存储在与该示例文件相同的目录中)。 有两个注释指示我们将在哪里使用代码扩展此模板。

正如使用jQuery时所做的几乎所有操作一样,它读取或操作文档对象模型(DOM)时,我们需要确保在DOM准备就绪后立即开始添加事件等。

为此,我们为文档注册了一个ready事件。

  $(document).ready(function() { // do stuff when DOM is ready }); 

将警报放入该函数没有多大意义,因为警报不需要加载DOM。 因此,让我们尝试一些更复杂的方法:单击链接时显示警报。

将以下内容添加到<body>

  <a href="">Link</a> 

现在更新$(document).ready处理程序:

  $(document).ready(function() { $("a").click(function() { alert("Hello world!"); }); }); 

然后,您只需将此JavaScript以生成纯文本的形式添加到生成它的Delphi,C ++或C#代码中即可。 您必须将Google AdSense代码插入$(document).ready处理程序的主页中。

===============>>#3 票数:0

如果您需要从外部(而不是像jQuery那样从内部)访问DOM,则可以使用Delphi轻松进行。 但是,您首先应该从bsalsa安装出色的嵌入式Web浏览器组件TEmbeddedWB ,这使得使用浏览器非常容易。

TEmbeddedWB组件放到您的表单上,并为OnDocumentComplete添加一个处理程序,该处理程序在完全访问文档的DOM时引发:

procedure TForm1.EmbeddedWB1DocumentComplete(ASender: TObject; const pDisp: IDispatch; var URL: OleVariant);
begin
  // check that the event is raised for the outermost browser (not frames or iframes)
  if (pDisp as IUnknown) = (EmbeddedWB1.ControlInterface as IUnknown) then
  begin
    // do your work here
    // example: show a message 
    EmbeddedWB1.ExecScript('eval("alert(''Hello'')")', '');
  end;
end;

开始导航以对此进行测试:

EmbeddedWB1.Navigate('http://www.google.com');

  ask by relativ translate from so

未解决问题?本站智能推荐:

2回复

列出Windows计算机上安装的所有Web浏览器

是否有一个常用的方法/ api列出我的机器(和每个用户)上安装的所有Web浏览器(名称,可执行文件,默认是/否),以及如何找出哪个是默认的Web浏览器? 我看到了这个问题: 如何找到机器上安装的所有浏览器 在MSDN上: 如何使用Windows开始菜单注册Internet浏览器或电子
5回复

按代码获取文件tnsnames.ora的位置

如何在安装了Oracle客户端的计算机中按代码获取tnsnames.ora文件的位置? 是否有一个Windows注册表项指示此文件的位置?
2回复

如何使用非托管代码(C ++ / Delphi)编写Outlook外接程序?

我使用C#开发了一个Outlook加载项。 我想完全避免因减慢Outlook启动速度而受到惩罚。 因此,我想创建一个“加载程序”加载项。 它是用C ++ / Delphi编写的,除了在加载蜂鸣声之后启用C#加载项,什么也不做。 关于stackoverflow等有很多提示,但是没有直接的文档可用
3回复

快速检查特定进程的运行方式

要检查进程是否正在运行,可以使用“CreateToolHelp32SnapShot”Windows API函数并枚举正在运行的进程。 示例C / C ++代码在答案问题中给出: 检查一个特定进程是否在使用C ++的Windows上运行 我的问题是,如果您知道自己正在寻找特定的流程,是否有
1回复

如何强制Internet Explorer打开它当前运行的实例而不是创建一个新实例?

如何以编程方式启动IE( iexplore.exe )并在当前运行的实例中导航(通过打开新选项卡或替换当前URL)而不是创建新实例。 我搜索了一个命令行开关,并尝试使用InternetExplorer.Application ,但无济于事。 这是我需要的伪 (IE6-IE9会很好):
1回复

.netCore DLL可以从C ++ / Delphi等本机代码使用吗

.netCore v1.1具有ClassLibrary Project,它将编译为DLL 此DLL是不受管的吗? 我可以从C ++或Delphi中调用它吗?
1回复

使用DOM delphi 7以编程方式单击Web浏览器中的链接

<span id="lblCommande">Bon de commande</span></a>| <a href="retour.aspx"> 这是我要使用按钮“单击”的链接。 我知道如何使用以下命令单击按钮: WebBrowser.
1回复

TWebBrowser的HTML源代码-如何检测流编码?

基于以下问题: 如何从TWebBrowser获取HTML源代码 如果我使用具有Unicode代码页的html页面运行此代码 ,则结果是乱码,因为TStringStream在D7中不是Unicode。 该页面可能是UTF8编码的,也可能是其他(Ansi)代码页编码的。 如何检测TSt
2回复

如何禁用XE6中的嵌入式设计器?

为了在一个窗口中查看多个视图,我阅读了此答案,但似乎这些选项不再可用,现在我的问题是如何配置rad studio xe6 在窗口中 查看多个视图 (例如,实际代码和设计形式) 。
1回复

铬嵌入式框架

如何使用选项卡或仅使用相同的cef组件以相同的形式真正打开新的选项卡,或者这不是重要的部分。 重要的是 在某些情况下(例如在实际的浏览器中)是行不通的(我认为这并不是真正的分派到新标签页)。 在TWebBrowser中,我没有这样的问题,代码运行良好: 如何进行真正的调度