C# 在将Adsense代码插入嵌入式浏览器后,如何使其运行? 我需要使用任何语言中的DOM API(Delphi,C++,C语言)将谷歌广告添加到页面中。我可以使用DOM将Adsense代码添加到网页中,但是如何触发它运行呢
广告代码通常在C# 在将Adsense代码插入嵌入式浏览器后,如何使其运行? 我需要使用任何语言中的DOM API(Delphi,C++,C语言)将谷歌广告添加到页面中。我可以使用DOM将Adsense代码添加到网页中,但是如何触发它运行呢,c#,c++,delphi,dom,C#,C++,Delphi,Dom,广告代码通常在文档.load事件中运行。如何将我的功能附加到该事件?(我也可以使用文档下载事件,但此事件与DOM不兼容。) 在运行Adsense Javascript代码之前,我需要将我的函数附加到文档。加载,并且我需要使用DOM功能解析HTML代码。听起来更像是一个Javascript问题 如果您使用以下框架,所有这些都会变得容易得多:它将允许您从javascript代码轻松访问DOM 例如,请参阅官方教程,以轻松操作页面的DOM 以下是本页的摘录: 我们从一个空的html页面开始: <
文档.load
事件中运行。如何将我的功能附加到该事件?(我也可以使用文档下载事件,但此事件与DOM不兼容。)
在运行Adsense Javascript代码之前,我需要将我的函数附加到
文档。加载,并且我需要使用DOM功能解析HTML代码。听起来更像是一个Javascript问题
如果您使用以下框架,所有这些都会变得容易得多:它将允许您从javascript代码轻松访问DOM
例如,请参阅官方教程,以轻松操作页面的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>
作为一个例子,在该函数中添加警报没有多大意义
警报不要求加载DOM。所以,让我们试试看
稍微复杂一点:单击链接时显示警报
将以下内容添加到
:
然后,您只需在Delphi、C++或C代码中添加JavaScript,生成纯文本。您必须将Google AdSense代码插入
$(文档)的主页。准备好处理程序。使用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;
过程TForm1.FormCreate(发送方:TObject);
开始
WebBrowser1.导航('http://stackoverflow.com');
结束;
程序TForm1.WebBrowser1文档完成(发件人:ToObject;
常量pDisp:IDispatch;变量URL:OleVariant);
变量
脚本:宽字符串;
开始
脚本:='document.onload=alert(“boo!”);';
如果(pDisp作为IWebBrowser)为零,则
((pDisp作为IWebBrowser)。文档作为IHTMLDocument2.parentWindow.execScript(脚本“JScript”);
结束;
这里还有一些关于的附加信息。这对你的情况可能有用。
请注意:
TEventObject=class(TDebugInterfacedObject,IDispatch)
应声明为:
TEventObject=class(TInterfacedObject,IDispatch)
如果需要从外部(而不是像jQuery那样从内部)访问DOM,那么可以使用Delphi轻松完成。但是,您应该首先安装优秀的嵌入式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');
这是不可能的:(我不能在文档提交之前访问DOM!在系统编程中,也许我可以访问,但我没有像document.load之前那样的事件,如果我喜欢那个事件,是的,我可以使用您的示例,但是html文档已经准备就绪(状态已经就绪)例如,感谢特拉玛,你是一个非常优秀的程序员,我用你给我展示的方法解决了我的问题:)doc.onreadystatechange:=(TEventObject.Create(DocReadyStateChangeProc)as IDispatch);你查过邮局吗。看起来你也要做类似的事情。谢谢特拉玛,你是一个非常好的程序员,我用你给我演示的方法解决了我的问题:)doc.onreadystatechange:=(TEventObject.Create(DocReadyStateChangeProc)as IDispatch)@特拉玛,很好的链接:)你有没有实现过WebBrowser1.Document.InvokeScript
?@kobik,没有经验,但也许等我有时间我会试试:)不管怎样,我仍然想知道为什么有这么多人否决这种“恶意软件创建”问题。我知道这似乎是恶意的,但请注意您可以做些什么,例如,使用HWND_广播
等@TLama,我同意您关于否决票的看法。。。也许这是网站的政策。不知道我不喜欢政治。顺便说一句,InvokeScript
的实现可以在EwbTools.pas
(TEmbeddedWB)方法WBExecScript
中找到。(虽然有点乱。可以优化):)我已经在使用EmbeddedWB核心库:)但是我不能使用VCL组件(TEmbeddedWB)。我需要找到活动的internet explorer窗口,以便在活动的internet explorer中操作html代码。
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;
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');