Hvordan kan jeg forhindre at disse dialogene fra TWebBrowser

stemmer
-2

Jeg har et problem som er veldig irriterende når jeg bruker Twebbrowserpå min søknad, etter noen minutter av surfing på nettet, noen annonser popup og når jeg prøver å la dem det viser meg denne meldingen:

Er du sikker på at du vil forlate denne siden?

skriv

Spørsmålet er:

Hvordan kan jeg forhindre Twebbrowserfra å vise slike dialoger? Jeg prøvde å sette webbrowser.silent := true;, og det bare stoppet den irriterende Javascripts feil.

Jeg vil helt surfe på nettet med twebbrowserstille uten noen popups og varsler.

Hvis du har en løsning for dette kan du legge til en kilde eksempel fordi jeg ikke vet så mye ikke ekspert nok.

Tror du installerer en annen WebBrowser komponenter vil fikse det? Hvis det er du antyder meg en nettleser komponenter forårsake jeg søkte, og jeg gjorde ikke funnet.

Publisert på 12/07/2014 klokken 06:20
kilden bruker
På andre språk...                            


2 svar

stemmer
1

Den WebBrowserkontrollen seg selv gir ikke mulighet til å blokkere disse dialogene, så Silenthjelper ikke. Jeg kan ikke gi en referanse akkurat nå, men jeg er sikker på at jeg har lest den fra MSDN et sted.

Heldigvis kan du observere Windows-meldinger og blokkere disse dialogene som du vil. Her er en kjent komponent TEmbeddedWBsom implementerer alt du trenger som en VCL . Hvis du synes det er for stor, kan du trekke relatert kode inn i prosjektet.

procedure TEmbeddedWB.FormWndProc(var AMsg: Messages.TMessage);
begin
  if AMsg.Msg = WM_ACTIVATE then
  begin
    HandleDialogBoxes(AMsg);
  end;
  FOldWindowProc(AMsg);
end;

procedure TEmbeddedWB.HandleDialogBoxes(var AMsg: Messages.TMessage);
var
  PopHandle: Integer;
  DlgCaption, DlgClss: string;
  Msg: TWMActivate;
  WI: TWindowInfo;
begin
  Msg := TWMActivate(AMsg);
  if Msg.Active = 0 then
  begin
    PopHandle := Msg.ActiveWindow;
    FillChar(WI, SizeOf(WI), 0);
    if PopHandle <> 0 then
    begin
      WI.dwStyle := Abs(GetWindowLong(PopHandle, GWL_STYLE));
      WI.dwExStyle := Abs(GetWindowLong(PopHandle, GWL_EXSTYLE));
    end;

    DlgClss := GetWinClass(PopHandle);
    if (DlgClss = 'Internet Explorer_TridentDlgFrame') or ((DlgClss = '#32770') and
      ((GetWinClass(Windows.GetParent(PopHandle)) <> 'TApplication') and
      (FindControl(Windows.GetParent(PopHandle)) = nil))) then
    begin
      DlgCaption := GetWinText(PopHandle);
      if (PopHandle <> 0) and Assigned(FOnShowDialog) then
        FOnShowDialog(Self, PopHandle, WI.dwExStyle, DlgCaption, FDialogBoxes.FNewCaption, FDialogBoxes.FDisableAll);

      if FDialogBoxes.FDisableAll then
        SendMessage(PopHandle, WM_CLOSE, 0, 0);
      if FDialogBoxes.FReplaceIcon then
        SendMessage(PopHandle, WM_SETICON, ICON_SMALL, Forms.Application.Icon.Handle);

      if FDialogBoxes.FReplaceCaption then
      begin
        DlgCaption := StringReplace(DlgCaption, 'Microsoft ', '', []);
        DlgCaption := StringReplace(DlgCaption, 'Internet Explorer', FDialogBoxes.FNewCaption, []);
        SetWindowText(PopHandle, PChar(DlgCaption));
      end;

      if FDisableErrors.FScriptErrorsSuppressed then
      begin
        if (AnsiPos('SCRIPT', AnsiUpperCase(DlgCaption)) <> 0) then
        begin
          PostMessage(PopHandle, WM_LBUTTONDOWN, 0, 0);
          PostMessage(PopHandle, WM_LBUTTONUP, 0, 0);
          SendMessage(PopHandle, WM_CLOSE, 0, 0);
          Forms.Application.ProcessMessages;
          Exit;
        end;
        if (AnsiPos('ERROR', AnsiUpperCase(DlgCaption)) <> 0) or (WI.dwExStyle = 4260097) then
        begin
          DestroyWindow(PopHandle);
          Exit;
        end;
      end;
      if FPrintOptions.FEnabled then
      begin
        bPrintOptionsEnable := True;
        if bInvokingPageSetup then
        begin
          bInvokingPageSetup := False;
          if PrintingWithOptions then
          begin
            SetWindowPos(0, 0, -4400, 0, 0, 0, 0); //SetWindowPos(Wnd, 0, -600, 0, 0, 0, 0);
            PrintingWithOptions := False;
          end;
          if FPrintOptions.FOrientation = poPortrait then
            SendDlgItemMessage(PopHandle, $0420, BM_CLICK, 0, 0)
          else
            SendDlgItemMessage(PopHandle, $0421, BM_CLICK, 0, 0);
          SetDlgItemText(PopHandle, $1FD3, PChar(FPrintOptions.FHeader));
          SetDlgItemText(PopHandle, $1FD5, PChar(FPrintOptions.FFooter));
          SetDlgItemText(PopHandle, $0483, PChar(PrintMarginStr(FPrintOptions.FMargins.FLeft)));
          SetDlgItemText(PopHandle, $0484, PChar(PrintMarginStr(FPrintOptions.FMargins.FTop)));
          SetDlgItemText(PopHandle, $0485, PChar(PrintMarginStr(FPrintOptions.FMargins.FRight)));
          SetDlgItemText(PopHandle, $0486, PChar(PrintMarginStr(FPrintOptions.FMargins.FBottom)));
          if (Win32Platform = VER_PLATFORM_WIN32_NT) and (Win32MajorVersion > 4) then
            PostMessage(FindWindowEx(PopHandle, 0, 'Button', nil), BM_CLICK, 0, 0) //Win2000
          else
            SendDlgItemMessage(PopHandle, 1, BM_CLICK, 0, 0);
        end;
      end;
    end;
  end;
end;
Svarte 12/07/2014 kl. 07:55
kilden bruker

stemmer
0

For å hindre at popup-annonser som vises URL-sider, må du bruke TWebBrowser er OnNewWindow2 og OnBeforeNavigate2 arrangementer for å avbryte handlingen. Du må avbryte den i begge hendelsene, fordi når OnNewWindow2 er kansellert, vil TWebBrowser prøver å laste samme nettadresse igjen i hovedvinduet. Så din OnBeforeNavigate2 behandleren må kodes for å vite når OnNewWindow2 ble kansellert på forhånd og som URL. Ellers ville du ikke være i stand til å besøke noen av sidene i det hele tatt hvis du avbryter alt.

Som for script varsler, bør sette Silent til sann håndtere disse.

Svarte 12/07/2014 kl. 14:33
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more