2016-07-08 10 views
-2

私は、どのように参照元メソッドを設定しているのかという問題があると思います。この関数は正しく呼び出されていると私は思います。クラスを拡張せずに仮想メソッドのパラメータ値を変更する

SimpleHandlerクラス:私の懸念事項は、以下の2つの機能とは何

は:以下のクラスで上記のいずれかに問題がある場合

// Return the handler for browser request events. 
    /// 
    /*--cef()--*/ 
CefRefPtr<CefRequestHandler> GetRequestHandler() override { 
     return this; 
     } 


virtual CefRequestHandler::ReturnValue OnBeforeResourceLoad(
      CefRefPtr<CefBrowser> browser, 
      CefRefPtr<CefFrame> frame, 
      CefRefPtr<CefRequest> request, 
      CefRefPtr<CefRequestCallback> callback) OVERRIDE; 

私に知らせてください。

CefRequestHandler::ReturnValue SimpleHandler::OnBeforeResourceLoad(
     CefRefPtr<CefBrowser> browser, 
     CefRefPtr<CefFrame> frame, 
     CefRefPtr<CefRequest> request, 
     CefRefPtr<CefRequestCallback> callback) 

{ 

CefRequest::ReferrerPolicy origin = REFERRER_POLICY_ALWAYS; 
request->SetReferrer("www.google.com",origin); 


    return RV_CONTINUE; 

} 

私は動作を変更するために使用していますsetpreferrer方法:SetReferrerを含む

/// 
    // Set the referrer URL and policy. If non-empty the referrer URL must be 
    // fully qualified with an HTTP or HTTPS scheme component. Any username, 
    // password or ref component will be removed. 
    /// 
    /*--cef()--*/ 
    virtual void SetReferrer(const CefString& referrer_url, 
          ReferrerPolicy policy) =0; 

クラスIは、(simple_handler.ccファイルから)OnBeforeResourceLoad関数を呼び出す方法

class SimpleHandler : public CefClient, 
         public CefDisplayHandler, 
         public CefLifeSpanHandler, 
         public CefLoadHandler, 
      public CefRequestHandler{ 
public: 
    explicit SimpleHandler(bool use_views); 
    ~SimpleHandler(); 

    // Provide access to the single global instance of this object. 
    static SimpleHandler* GetInstance(); 

    // CefClient methods: 
    virtual CefRefPtr<CefDisplayHandler> GetDisplayHandler() OVERRIDE { 
    return this; 
    } 
    virtual CefRefPtr<CefLifeSpanHandler> GetLifeSpanHandler() OVERRIDE { 
    return this; 
    } 
    virtual CefRefPtr<CefLoadHandler> GetLoadHandler() OVERRIDE { 
    return this; 
    } 

virtual CefRefPtr<CefRequestHandler> GetRequestHandler() OVERRIDE { 
    return this; 
    } 

    // CefDisplayHandler methods: 
    virtual void OnTitleChange(CefRefPtr<CefBrowser> browser, 
          const CefString& title) OVERRIDE; 

    // CefLifeSpanHandler methods: 
    virtual void OnAfterCreated(CefRefPtr<CefBrowser> browser) OVERRIDE; 
    virtual bool DoClose(CefRefPtr<CefBrowser> browser) OVERRIDE; 
    virtual void OnBeforeClose(CefRefPtr<CefBrowser> browser) OVERRIDE; 

    // CefLoadHandler methods: 
    virtual void OnLoadError(CefRefPtr<CefBrowser> browser, 
          CefRefPtr<CefFrame> frame, 
          ErrorCode errorCode, 
          const CefString& errorText, 
          const CefString& failedUrl) OVERRIDE; 

    // Request that all existing browser windows close. 
    void CloseAllBrowsers(bool force_close); 

    bool IsClosing() const { return is_closing_; } 



virtual CefRequestHandler::ReturnValue OnBeforeResourceLoad(
     CefRefPtr<CefBrowser> browser, 
     CefRefPtr<CefFrame> frame, 
     CefRefPtr<CefRequest> request, 
     CefRefPtr<CefRequestCallback> callback) OVERRIDE; 


private: 
    // Platform-specific implementation. 
    void PlatformTitleChange(CefRefPtr<CefBrowser> browser, 
          const CefString& title); 

    // True if the application is using the Views framework. 
    const bool use_views_; 

    // List of existing browser windows. Only accessed on the CEF UI thread. 
    typedef std::list<CefRefPtr<CefBrowser> > BrowserList; 
    BrowserList browser_list_; 

    bool is_closing_; 

    // Include the default reference counting implementation. 
    IMPLEMENT_REFCOUNTING(SimpleHandler); 
}; 

#endif // CEF_TESTS_CEFSIMPLE_SIMPLE_HANDLER_H_ 

方法。

[1]: http://magpcss.org/ceforum/apidocs/projects/%28default%29/cef_request_handler.h.html 
+1

http://stackoverflow.com/help/mcve – kfsone

答えて

0

CefClientインターフェイスを実装するクラスが存在する必要があります。そのクラスは、すでに書いたオーバーライドOnBeforeResourceLoad方法で実際CefRequestHandlerを返すべき方法に

/// 
// Return the handler for browser request events. 
/// 
/*--cef()--*/ 
virtual CefRefPtr<CefRequestHandler> GetRequestHandler() { 
    return NULL; 
} 

GetRequestHandlerをオーバーライドする必要があります。

それは次のようになります。

class MyCefClient : public CefClient, public CefRequestHandler { 
public: 

    CefRefPtr<CefRequestHandler> GetRequestHandler() override { 
    return this; 
    } 

    ReturnValue OnBeforeResourceLoad(
     CefRefPtr<CefBrowser> browser, 
     CefRefPtr<CefFrame> frame, 
     CefRefPtr<CefRequest> request, 
     CefRefPtr<CefRequestCallback> callback) override { 

    // write your code here 

    return RV_CONTINUE; 
    } 
}; 

CefSimpleの例では、クラスのSimpleHandlerがあります。その上にコードを追加することができます。

+0

ご意見ありがとうございました。私はあなたの変更を実装しましたが、依然として参照元を設定できません。私はSimpleHandlerクラスにgetrequesthandler()メソッドを追加しましたが、残念ながら変更はありませんでした。他のどんな考えも高く評価されます。私はCEFフォーラムでも手をつけています。 – michael275

+0

はすべてを再インストールしなければなりませんでした。これは私が本当に助けに感謝workded。 – michael275

関連する問題