1

Delphi アプリで Web サイトにログインし、ページに移動し、特定のファイルを自動的にダウンロードする方法については、埋め込みブラウザでダウンロードしたファイルを保存する場所を確認しないようにするにはどうすればよいですか?の解決策を参照してください。、ファイルのダウンロードに大いに役立ちました。

最後の問題は、ポップアップ ウィンドウで開く操作の最後のステップです。TWebBrowser.NewWindow2 を実装してポップアップ ウィンドウをキャプチャするソリューションはたくさんありますが、これらのイベントはどれも上記のコードでは機能しないようです。上記のコードの .invokeevent はおそらく動作しますか?

関数を呼び出すために、invokeveent と 273(newwindow3) の dispID を使用すると、2 番目の Web ブラウザーを popupwindow の URL に twebbwowser.navigate() できます。

私の問題は、ポップアップウィンドウに基本的に1行のjavascript「document.print(parent.parent.opener.thefunction())」があることです。2番目のtwebbrowserには親への参照がないため、これは失敗します。

TWebBrowser.NewWindow2 または 3 をトリガーして、次のコード サンプルを修正します。LVarArray[0] {const IDispatch}, is null for some reason.

 procedure TWebBrowser.InvokeEvent(ADispID: TDispID; var AParams: TDispParams);
             // DispID 250 is the BeforeNavigate2 dispinterface and to the FFileSource here
          // is stored the URL parameter (for cases, when the IDownloadManager::Download
          // won't redirect the URL and pass empty string to the pszRedir)
          //showmessage('test');
          var
        ArgCount : Integer;
        LVarArray : Array of OleVariant;
        LIndex : Integer;
        begin
        inherited;
        ArgCount := AParams.cArgs;
        SetLength(LVarArray, ArgCount);
        for LIndex := Low(LVarArray) to High(LVarArray) do
        LVarArray[High(LVarArray)-LIndex] := OleVariant(TDispParams(AParams).rgvarg^[LIndex]);

        case ADispID of
          250: FFileSource := OleVariant(AParams.rgvarg^[5]);

        273: DoNewWindow3(Self,
         LVarArray[0] {const IDispatch},
          WordBool((TVarData(LVarArray[1]).VPointer)^) {var WordBool},
          LVarArray[2] {const OleVariant},
        LVarArray[3] {const OleVariant},
        LVarArray[4] {const OleVariant});
            end;
         end;
4

1 に答える 1

2

あなたが間違った質問をしたと思うので、私はあなたの質問に直接答えるつもりはありません。GUIをユーザーに表示せずに、インターネット経由でファイルをダウンロードしようとしています。そのため、組み込みブラウザは単に間違った解決策です。

ポップアップダイアログを抑制しようとするのではなく、ポップアップダイアログを表示しないツールを使用してください。あなたがすべきだと私が信じているのは、直接HTTPダウンロードを使用してファイルをダウンロードすることです。それを達成するための多くの異なる方法があります。たとえば、Delphiですぐに使用できる非常に便利な方法は、Indyを使用することです。必要なコンポーネントはですTIdHttp

于 2013-02-05T09:13:16.810 に答える