2013-11-26 8 views
5

私はGeckfx22.0xulrunner22.0を使用しています。 .NetのGeckoWebBrowserは他のGeckoWebBrowserの他のインスタンスとCookieを共有しているので、GeckoWebBrowserには他のGeckoWebBrowserや他のインスタンスで以前に作成されたCookieを共有しない独自のCookieコンテナが必要です。これは可能ですか? GeckoFXはインスタンスごとに別々のCookieContainerを使用できますか?

たとえば、GeckoWebBrowserを作成するときにCookieを使用しないでください。そして私がGeckoWebBrowserの2つのインスタンスを実行するとき、彼らは独自のクッキーコンテナを持っていて、お互いにクッキーを共有したり競合したりしません。

どうすれば可能ですか?

異なるクラスを作成してgeckofxを開始することで、さまざまな方法で試しましたが、同時に別のブラウザを実行しているときに、他のブラウザ間でCookieを共有しています。あるブラウザからCookieを削除すると、他のブラウザでも同じことが起こります。私はproxyuseragentを別々の時間とその動作で開始しましたが、同時に複数のブラウザに対してさまざまなユーザエージェントを適用できません。

public void Initiate() 
    { 
     Gecko.Xpcom.Initialize(AppDomain.CurrentDomain.BaseDirectory + "/xulrunner"); 
     if (this.IsProxySet) 
     { 
      Gecko.GeckoPreferences.User["network.proxy.http"] = this.Host; 
      Gecko.GeckoPreferences.User["network.proxy.http_port"] = this.Port; 
      Gecko.GeckoPreferences.User["network.proxy.type"] = 1; 
     } 
     if (IsUseragentSet) 
     { 
      Gecko.GeckoPreferences.User["general.useragent.override"] = this.Useragent; 
     } 
    } 

、私は次のコードを使用していクッキー削除する:

nsICookieManager CookieMan; 
      CookieMan = Xpcom.GetService<nsICookieManager>("@mozilla.org/cookiemanager;1"); 
      CookieMan = Xpcom.QueryInterface<nsICookieManager>(CookieMan); 
      CookieMan.RemoveAll(); 

ヘルプが理解されるだろうが!

答えて

1

あなたはおそらくこれをサポートしている独自のクッキーマネージャを実装してみてください:

はこれを行う方法の例については、unittestのRegister_AfterDefaultFactoryHasBeenUnregistered_NewCookieServiceIsUsedInsteadOfDefaultOne を参照してください。

このコードは、現在テストされていないと

typeosこのコードを含むことができ、あなたはそれを説明することができv22.0-0.6

[Guid("c375fa80-150f-11d6-a618-0010a401eb10")] 
    [ContractID(TestCookieServiceFactory.ContractID)] 
    public class TestCookieServiceFactory 
     : GenericOneClassNsFactory<TestCookieServiceFactory, TestCookieService> 
    { 
     public const string ContractID = "@mozilla.org/cookieService;1"; 
    } 

public class TestCookieService : nsICookieService 
{ 
    // Implement nsICookieService...  
} 

public void Main() 
{ 
    Xpcom.Initialize("My Xulrunner/Fireofox location"); 
    var existingFactoryDetails = TestCookieServiceFactory.Unregister(); 
    TestCookieServiceFactory.Register(); 

    var browser = new GeckofxWebBrowser(); 
    // Add browser to form etc... 
    browser.Navigate("http://SomeWebPageThatUsesCookies") 

    // Cookie requests should now be sent to TestCookieService, process them as your want. 
} 
+0

より新しいgeckofxのバージョンが必要? – yasmuru

+0

unittestは、Xpcomサービス "@ mozilla.org/cookieService; 1"の置き換え方法をデモします。 (私はcookiemanagerのために同じことをすることができると思う; 1かcookiemanagerはcookieServiceを使って働くかもしれない)。このように動作して、TestCookieServiceFactoryは "@ mozilla.org/cookieService; 1"の新しい実装を作成します。 (実際の作業は、nsICookieServiceインターフェイスを実装するTestCookieServiceクラスに委任されます)。その後、プログラムの起動時(つまりXpCom.Initの後)に、TestCookieServiceFactory.Unregister()を呼び出して既定のサービスを削除し、Register新しいものをインストールする。 – Tom

+0

あなたの返事をありがとう、私はそれを試してみます.. – yasmuru

関連する問題