Delphi - запускать javascript в веб-браузере [дубликаты]

1

Возможный дубликат:
Как вызвать событие OnChange в "Выбрать" ? (Delphi - WebBrowser)

Привет,

Я загружаю веб-страницу в Twebrowser в delphi, веб-страница имеет форму с раскрывающимся списком. Я могу заставить свою программу выбирать идентификатор элемента, как в раскрывающемся меню, но опция выбора имеет событие onchange, как я могу запустить событие onchange в delphi без использования execScript ('yourfunctioname()', 'JavaScript').;

heres select с событием onChnage

<select align="left" id="carrierNameDropDown_UNSHIPPEDITEMS" onChange="MYO.ES.OtherCarrierToggle (this, 'UNSHIPPEDITEMS' )">
          <option value="0"  selected="1" >Select</option>
              <option value="Chronopost"  >Chronopost</option>
              <option value="City Link"  >City Link</option>
              <option value="DHL"  >DHL</option>
              <option value="DPD"  >DPD</option>
              <option value="Deutsche Post"  >Deutsche Post</option>
              <option value="Fastway"  >Fastway</option>
              <option value="FedEx"  >FedEx</option>
              <option value="GLS"  >GLS</option>
              <option value="GO!"  >GO!</option>
              <option value="Hermes Logistik Gruppe"  >Hermes Logistik Gruppe</option>
              <option value="La Poste"  >La Poste</option>
              <option value="Parcelforce"  >Parcelforce</option>
              <option value="Parcelnet"  >Parcelnet</option>
              <option value="Poste Italiane"  >Poste Italiane</option>
              <option value="Royal Mail"  >Royal Mail</option>
              <option value="SDA"  >SDA</option>
              <option value="Smartmail"  >Smartmail</option>
              <option value="TNT"  >TNT</option>
              <option value="Target"  >Target</option>
              <option value="UPS"  >UPS</option>
              <option value="Yodel"  >Yodel</option>

          <option value="Other">
              Specify carrier:
          </option>
        </select>

Я заработал, выполнив:

if EmbeddedWB1.Document <> nil then begin
if EmbeddedWB1.Document.QueryInterface(IHTMLDocument3,docb) = S_OK then begin
elb := docb.getElementById('carrierNameDropDown_UNSHIPPEDITEMS');
if elb <> nil then begin
(elb as IHTMLSelectElement).value := 'Parcelforce';
OleVariant (elb as IHTMLElement). FireEvent ('onchange');
end;
  • 0
    спасибо Ян! хотя я попробовал и продолжаю получать ошибку: delphi не смог завершить операцию из-за ошибки 80020101 :(
  • 0
    Я думаю, что я мог бы использовать FireEvent ("onchange"), но я не уверен, как его использовать ... все еще смотрю ..
Показать ещё 1 комментарий
Теги:
browser

1 ответ

1
Лучший ответ

Это будет работать:

uses 
  MSHTML;

procedure TBrowserPageIE.Test;
var
  doc : IHTMLDocument3;
  el  : IHTMLElement;
  v   : OleVariant;
begin
  if FBrowser.Document <> nil then begin
    if FBrowser.Document.QueryInterface(IHTMLDocument3,doc) = S_OK then begin
      el := doc.getElementById('carrierNameDropDown_UNSHIPPEDITEMS');

      if el <> nil then begin
        (el as IHTMLSelectElement).value := 'UPS';
        (el as IHTMLElement3).FireEvent('onchange', v);
      end;
    end;
  end;
end;

и это с поздним связыванием

procedure TBrowserPageIE.Test;
var
  doc : IHTMLDocument3;
  el  : OleVariant;
  v   : OleVariant;
begin
  if FBrowser.Document <> nil then begin
    if FBrowser.Document.QueryInterface(IHTMLDocument3,doc) = S_OK then begin
      el := doc.getElementById('carrierNameDropDown_UNSHIPPEDITEMS');
      el.value := 'UPS';
      el.FireEvent('onchange', v);
    end;
  end;
end;
  • 0
    эй, маттиас, я попробовал, но он вернулся с необъявленным идентификатором: 'IHTMLElement3' что я делаю не так?
  • 0
    MSHTML в вашем списке использования?
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню