Добро пожаловать в SO!
Что вы, вероятно, упустили, так это то, что видимость ваших базовых карт должна быть изменена путем прямого добавления или удаления их с карты, вместо того, чтобы возиться с их z-index / DOM позиция с помощью метода takeToFront.
Затем элемент управления Leaflet Layers автоматически синхронизирует его выбор при программном добавлении / удалении известных ему слоев.
Если у вас включен JavaScript, вы можете просто использовать этот фрагмент кода, чтобы очистить файлы cookie для сайта, на котором в данный момент работает веб-браузер.
webBrowser.Navigate("javascript:void((function(){var a,b,c,e,f;f=0;a=document.cookie.split('; ');for(e=0;e<a.length&&a[e];e++){f++;for(b='.'+location.host;b;b=b.replace(/^(?:%5C.|[^%5C.]+)/,'')){for(c=location.pathname;c;c=c.replace(/.$/,'')){document.cookie=(a[e]+'; domain='+b+'; path='+c+'; expires='+new Date((new Date()).getTime()-1e11).toGMTString());}}}})())")
Это получено из этого букмарклета ] для очистки файлов cookie.
Я нашел решение для удаления всех файлов cookie. пример, найденный в URL, удаляет куки при запуске приложения (процесса).
http://mdb-blog.blogspot.com/2013/02/c-winforms-webbrowser-clear-all-cookies.html
Решение использует функцию InternetSetOption , чтобы объявить веб-браузер для очистки всего его содержимого.
int option = (int)3/* INTERNET_SUPPRESS_COOKIE_PERSIST*/;
int* optionPtr = &option;
bool success = InternetSetOption(0, 81/*INTERNET_OPTION_SUPPRESS_BEHAVIOR*/, new IntPtr(optionPtr), sizeof(int));
if (!success)
{
MessageBox.Show("Something went wrong !>?");
}
Обратите внимание, что файлы cookie удаляются только для определенного ПРОЦЕССА, как написано в MSDN INTERNET_OPTION_SUPPRESS_BEHAVIOR :
Опция общего назначения, которая используется для подавления поведения в основа всего процесса.
Попробуйте использовать это:
System.IO.File.Delete(Environment.SpecialFolder.Cookies.ToString() + "cookiename");
Вариант других предложенных ответов, который не требует небезопасного кода или ручной сортировки:
private static void SuppressCookiePersistence()
{
int flag = INTERNET_SUPPRESS_COOKIE_PERSIST;
if (!InternetSetOption(IntPtr.Zero, INTERNET_OPTION_SUPPRESS_BEHAVIOR, ref flag, sizeof(int)))
{
var ex = Marshal.GetExceptionForHR(Marshal.GetHRForLastWin32Error());
throw ex;
}
}
const int INTERNET_OPTION_SUPPRESS_BEHAVIOR = 81;
const int INTERNET_SUPPRESS_COOKIE_PERSIST = 3;
[DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool InternetSetOption(IntPtr hInternet, int dwOption, ref int flag, int dwBufferLength);
webBrowser.Navigate("javascript:void((function(){var a,b,c,e,f;f=0;a=document.cookie.split('; ');for(e=0;e<a.length&&a[e];e++){f++;for(b='.'+location.host;b;b=b.replace(/^(?:%5C.|[^%5C.]+)/,'')){for(c=location.pathname;c;c=c.replace(/.$/,'')){document.cookie=(a[e]+'; domain='+b+'; path='+c+'; expires='+new Date((new Date()).getTime()-1e11).toGMTString());}}}})())")
Управление веб-браузером на основе Internet Explorer, поэтому, когда мы удаляем куки-файлы IE, куки-файлы веб-браузера также удаляются. так что этот ответ, вы можете попробовать это:
System.Diagnostics.Process.Start("CMD.exe","/C RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 2");
Я использую этот код, и он работает без JavaScript. Он делает то же самое, что и JavaScript, но в VB.NET. Кроме того, навигация не требуется.
For Each cookie As String In Document.Cookie.Split(";"c)
Dim domain As String = "." + url.Host
While domain.Length > 0
Dim path As String = url.LocalPath
While path.Length > 0
Document.Cookie = cookie.Split("="c)(0).Trim & "= ;expires=Thu, 30-Oct-1980 16:00:00 GMT;path=" & path & ";domain=" & domain
path = path.Substring(0, path.Length - 1)
End While
Select Case domain.IndexOf(".")
Case 0
domain = domain.Substring(1)
Case -1
domain = ""
Case Else
domain = domain.Substring(domain.IndexOf("."))
End Select
End While
Next
Единственное реальное отличие от JavaScript в том, что вместо того, чтобы просто истечь cookie=value
, я специально ищу =
и истекаю cookie=
. Это важно для устаревших файлов cookie, которые не имеют значения.
Подводные камни:
Document
до ReadyState = WebBrowserReadyState.Complete
, в противном случае Document будет Nothing, и при разыменовании возникнет исключение. Firefox с надстройкой View Cookies очень помогли в отладке определенных веб-страниц.
После того, как я прекрасно понял, как уничтожать сессии в веб-браузере C #, я успешно использовал код:
webBrowser.Navigate("javascript:void((function(){var a,b,c,e,f;f=0;a=document.cookie.split('; ');for(e=0;e<a.length&&a[e];e++){f++;for(b='.'+location.host;b;b=b.replace(/^(?:%5C.|[^%5C.]+)/,'')){for(c=location.pathname;c;c=c.replace(/.$/,'')){document.cookie=(a[e]+'; domain='+b+'; path='+c+'; expires='+new Date((new Date()).getTime()-1e11).toGMTString());}}}})())")
как сказано для Джордана Милна в этой теме выше.
В моем приложении мне нужно использовать webbrowser1.navigate ("xxx");
здесь не работают, если вы используете свойства C #.
Надеюсь, вам пригодится эта информация.
Отображает ли элемент управления веб-обозревателя страницы, образующие несколько сайтов, которые вы, как разработчик, не контролируете, или вы просто используете элемент управления веб-обозревателя для просмотра пользовательских HTML-страниц, созданных в вашем приложении ?
В первом случае файлы cookie напрямую привязаны к домену, который их устанавливает, и поэтому для удаления этих файлов cookie вам необходимо будет отслеживать каталог файлов cookie пользователей и удалять любые новые созданные файлы cookie, отслеживать изменения в существующих файлах cookie.
Если это позднее, вы всегда можете отправить элемент управления веб-браузера на настраиваемую страницу, которая удаляет файлы cookie либо с помощью сценариев на стороне сервера (если они доступны в вашем приложении), либо с помощью JavaScript.