2017-02-28 34 views
2

similar questionsが投稿されており、回答がありません。私はCefSharpを使って新しいですが、画像やフォントなどのウェブページですべてのリソースを読み込めるかどうかを知る必要があります。CefSharpでWebページによって読み込まれたリソースを取得する方法

これを達成する方法については、あまり知られていないようです。

より明確にするために、シナリオは非常に簡単です。 CefSharpでWebページを読み込むと、このWebページには画像、JavaScriptファイル、フォントファイルなどのリソースが含まれています。これらのリソースをすべて探索して調べるだけです。

ご協力いただきありがとうございました。私の英語には申し訳ありません。

+0

もっと明確にするために、私はリソースのリストがそれらのデータではないことを望んでいます。 – Zeokat

答えて

-1

あなたはタイプ$( "IMG")で要素をロードし、jQueryを使ってそれを行うことができます。それぞれ(function(){//何か});

+0

しかし、無限のスクロールを持つウェブページが問題になる可能性があります。私はCefSharpが 'CefSharp.IRequestHandler'を提供して私が必要とするものを達成したと思っていますが、わかりません。とにかくありがとう。 – Zeokat

5

あなたはリソースで何をしたいかについて完全には明確ではありません。

リソースの一覧だけをお望みですか?または、リソースの内容が必要ですか?

いずれにせよ、IRequestHandlerを実装して移動するための方法です。

 _myChromiumBrowser = new CefSharp.WinForms.ChromiumWebBrowser("http://somedomain.com") 
     { 
      RequestHandler = new MyRequestHandler() 
     }; 


public class MyRequestHandler : IRequestHandler 
{ 

    public bool GetAuthCredentials(IWebBrowser browserControl, IBrowser browser, IFrame frame, bool isProxy, string host, int port, string realm, string scheme, IAuthCallback callback) 
    { 
     return false; 
    } 

    public bool OnBeforeBrowse(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, bool isRedirect) 
    { 
        // You can check the Request object for the URL Here 
     return false; 
    } 

    public CefReturnValue OnBeforeResourceLoad(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IRequestCallback callback) 
    { 
        // You can also check the URL here 
     callback.Dispose(); 
     return CefReturnValue.Continue; 
    } 

    public bool OnCertificateError(IWebBrowser browserControl, IBrowser browser, CefErrorCode errorCode, string requestUrl, ISslInfo sslInfo, IRequestCallback callback) 
    { 
     callback.Dispose(); 
     return false; 
    } 

    public bool OnOpenUrlFromTab(IWebBrowser browserControl, IBrowser browser, IFrame frame, string targetUrl, WindowOpenDisposition targetDisposition, bool userGesture) 
    { 
     return false; 
    } 

    public void OnPluginCrashed(IWebBrowser browserControl, IBrowser browser, string pluginPath) 
    { 
    } 

    public bool OnProtocolExecution(IWebBrowser browserControl, IBrowser browser, string url) 
    { 
     return false; 
    } 

    public bool OnQuotaRequest(IWebBrowser browserControl, IBrowser browser, string originUrl, long newSize, IRequestCallback callback) 
    { 
     callback.Dispose(); 
     return false; 
    } 

    public void OnRenderProcessTerminated(IWebBrowser browserControl, IBrowser browser, CefTerminationStatus status) 
    { 
    } 

    public void OnRenderViewReady(IWebBrowser browserControl, IBrowser browser) 
    { 
    } 

    public void OnResourceLoadComplete(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength) 
    {  
       // You can also check the request URL here 
    } 

    public void OnResourceRedirect(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, ref string newUrl) 
    { 
    } 

    public bool OnResourceResponse(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response) 
    { 
     return false; 
    } 


    public IResponseFilter GetResourceResponseFilter(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response) 
    { 
     return null; 
    } 


    public void OnResourceRedirect(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response, ref string newUrl) 
    { 
    } 

    public bool OnSelectClientCertificate(IWebBrowser browserControl, IBrowser browser, bool isProxy, string host, int port, System.Security.Cryptography.X509Certificates.X509Certificate2Collection certificates, ISelectClientCertificateCallback callback) 
    { 
     callback.Dispose(); 
     return false; 
    } 

...実際、IRequestパラメータを持つ上記の関数のいずれかを使用してURLをチェックすることができます。 (上記はCEFSharpのバージョン55に基づいているため、実装しているバージョンに従ってハンドラを実装する必要があります)。上記は空のテンプレートで、プロジェクトでそのまま使用でき、CEFSharp/Chromium Webブラウザは適切なコンテンツを返すようにします。

どうやら、あなたはCEFSharpソースコード内の適切なコンテンツを取得するために、いくつかのソースコードを見つけることができます(私は私の目的のために必要とされていないとして)、私は深くそれにそれを見ていません。適切なHttpRequestを作成し、標準的な方法を使ってレスポンスを読むことで、コンテンツを取得することが簡単になります。

https://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.getresponse(v=vs.110).aspx

+0

はい、私の間違いです。リソースデータではなく、リソースのリスト(リソースURL)が必要です。 私の問題は、 'OnBeforeResourceLoad'に入るURLをテキストボックスに表示する方法です。残念ながら、私はC#でenougthを経験していません。 とにかくあなたのソリューションをありがとう、それは正しい方法です。 – Zeokat

+1

私は、相互作用が必要なところでは、Owningフォームを使って、パブリックデリゲートを作成し、ハンドラの作成中に割り当てます。 – VorTechS

+0

ありがとうございましたVorTechS、私は自分自身でtrygateとイベントについて少し読んでみましたが、悲しいことに解決策には達しませんでした。私は努力し続ける。 – Zeokat

関連する問題