jQuery.cookies no se cargará dinámicamente (con jQuery getScript, etc.)
-
28-10-2019 - |
Pregunta
Estoy intentando crear un método de eliminación de sesión para cookies al cerrar sesión.
Las cookies con una determinada clave de inicio deben eliminarse, por eso he creado un pequeño javascript que funciona.
Al intentar mantener todo mi código de cierre de sesión en un solo lugar, intento agregar Javascript dinámicamente.
En mi Código Detrás, estoy haciendo lo siguiente:
Dim logoutJS As String = ""
logoutJS += "function loadJQuery(callback) { "
logoutJS += "var addJquery = document.createElement('script'); " '// add jQuery to document
logoutJS += "addJquery.onload = callback; "
logoutJS += "addJquery.src = 'https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js'; "
logoutJS += "document.getElementsByTagName('head')[0].appendChild(addJquery); "
logoutJS += " }; "
logoutJS += "function loadCookies() { " '// now jQuery is loaded we can used getScript
logoutJS += "$.getScript('/Scripts/jquery_cookies_min.js', deleteCookies()); "
logoutJS += " };"
logoutJS += "function deleteCookies() { "
logoutJS += "var cookieSettings = $.cookies.filter(/^hgAdmin/); "
logoutJS += "$.each(cookieSettings, function (cookieName, content) { "
logoutJS += "$.cookies.del(cookieName); }); "
logoutJS += "window.location = ('/login.aspx'); };"
logoutJS += "loadJQuery(function() { loadCookies(); }); "
Common.logOut(Session)
ScriptManager.RegisterStartupScript(form1, GetType(HtmlGenericControl), "form1", logoutJS, True)
Obviamente, logoutJS es el Javascript que se llamará cuando se cargue la página de cierre de sesión, esto luego redirigirá nuevamente para iniciar sesión.
Cuando se inserta manualmente en la página y se codifican físicamente los archivos JS insertados, esto funciona bien.
Sin embargo, cuando se inserta dinámicamente, el $.getScript('/Scripts/jquery_cookies_min.js', deleteCookies());
no está funcionando correctamente.
El problema es que el jquery_cookies_min.js
El archivo NO se carga cuando se ejecuta la devolución de llamada. deleteCookies
se activa por lo que aparece un error de consola cannot call method 'filter' of undefined
.
Si cambio el script cargado por getScript
a un script diferente, otra copia de jQuery, por ejemplo, luego se carga (puedo ver el archivo Chrome Network
La consola muestra jQuery cargado dos veces), pero no cargará este archivo de cookies.
He verificado y verificado dos veces un millón de veces que la ubicación es correcta...y de hecho, funciona si incluyo manualmente el archivo JS...También lo intenté sin el anterior. /
¿Por qué no se carga este script?
EDITAR:También probé con el método del elemento appendChild según la forma en que estoy cargando jQuery...mismo resultado
Solución
Porque tu segundo parámetro es una función. llamar, no una definición o referencia de función.
Intente eliminar () de deleteCookies() o use:
$.getScript('/path', function () { deleteCookies() });