Как заставить код AdSense запускаться после его вставки во встроенный браузер? - PullRequest
0 голосов
/ 12 декабря 2011

Мне нужно добавить рекламу Google на страницу, используя DOM API на любом языке (Delphi, C ++, C #).Я могу добавить код AdSense на веб-странице с помощью DOM, но как впоследствии запустить его?

Рекламный код обычно запускается в событии document.load.Как мне прикрепить мою функцию к этому событию?(Я также могу использовать событие загрузки документа, но это событие не совместимо с DOM.)

Мне нужно прикрепить свою функцию к document.load, и мне нужно использовать функциональность DOM для анализа HTML-кода перед запуском Adsense Javascriptкод.

Ответы [ 3 ]

1 голос
/ 12 декабря 2011

используя 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)

0 голосов
/ 12 декабря 2011

Если вам нужен доступ к DOM извне (а не изнутри, как в jQuery), вы можете легко сделать это с Delphi. Но сначала вы должны установить отличный встроенный компонент веб-браузера TEmbeddedWB от bsalsa , который действительно облегчает работу с браузером.

Перетащите компонент 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');
0 голосов
/ 12 декабря 2011

Это больше похоже на вопрос JavaScript.

Все это будет намного проще сделать, если вы используете какую-то инфраструктуру, такую ​​как jQuery : это позволит вам легко получить доступ к DOM из вашего кода JavaScript.

См., Например, 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 будет готов.

Для этого мы регистрируем готовое событие для документа.

 $(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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...