2013-11-26 17 views
5

Ich verwende Geckfx22.0 und xulrunner22.0. Da GeckoWebBrowser in .Net Cookies mit allen anderen Instanzen von GeckoWebBrowsers teilt, möchte ich, dass ein GeckoWebBrowser einen eigenen Cookie-Container hat, der keine Cookies enthält, die zuvor in anderen GeckoWebBrowsers oder anderen Instanzen erstellt wurden.Ist das möglich? GeckoFX kann separate CookieContainer pro Instanz verwenden?

Zum Beispiel, wenn ich einen GeckoWebBrowser erstellen, sollte es keine Cookies haben. Und wenn ich 2 Instanzen von GeckoWebBrowser benutze, haben sie ihren eigenen Cookie-Container und teilen keine oder Konflikt-Cookies miteinander.

Wie ist das möglich?

Ich habe verschiedene Möglichkeiten versucht, indem Sie verschiedene Klassen erstellen und geckofx initiieren, aber wenn verschiedene Browser zur gleichen Zeit laufen, teilen sie Cookies unter anderen Browsern. Wenn ich Cookies von einem Browser entferne, passiert das auch für andere Browser. Ich habe die und useragent zu verschiedenen Zeiten initiiert und es funktioniert, kann aber nicht verschiedene Userages für mehrere Browser gleichzeitig anwenden.

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; 
     } 
    } 

Und Cookies entfernen i folgenden Code verwenden bin:

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

Hilfe geschätzt werden !!!

Antwort

1

Sie könnte möglicherweise versuchen, Ihre eigenen Cookie-Manager implementieren, die diese unterstützt:

siehe Unittest Register_AfterDefaultFactoryHasBeenUnregistered_NewCookieServiceIsUsedInsteadOfDefaultOne für ein Beispiel dafür, wie dies zu tun. Dieser Code

ist derzeit nicht getestet und können enthalten typeos

Dieser Code erfordert eine GeckoFX Version neuer als 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

können Sie es nur erklären? – yasmuru

+0

Der Unittest zeigt, wie der Xpcom-Dienst "@ mozilla.org/cookieService; 1" ersetzt werden kann. (Ich vermute, dass man dasselbe für den Cookie-Manager tun könnte; 1 oder vielleicht funktioniert der Cookie-Manager mit dem cookieService). Es funktioniert wie diese TestCookieServiceFactory erstellt eine neue Implementierung von "@ mozilla.org/cookieService; 1". (Die eigentliche Arbeit wird an eine TestCookieService-Klasse delegiert, die die nsICookieService-Schnittstelle implementiert.) Dann wird so früh wie möglich beim Programmstart (dh nach XpCom.Init) TestCookieServiceFactory.Unregister() aufgerufen, um den Standarddienst zu entfernen, und dann Register() aufrufen um ein neues zu installieren. – Tom

+0

Danke für Ihre Antwort, ich werde versuchen, dass .. – yasmuru