jQuery.cookies não carrega dinamicamente (com jQuery getScript etc)
-
28-10-2019 - |
Pergunta
Estou tentando criar um método de exclusão de sessão para cookies ao sair.
Cookies com uma determinada tecla de início precisam ser excluídos, então criei um pequeno javascript que funciona.
Tentando manter todo o meu código de logout em um só lugar, estou tentando adicionar o Javascript dinamicamente.
No meu Code Behind, estou fazendo o seguinte:
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 é o Javascript a ser chamado quando a página de logout é carregada, isso redireciona de volta para o login.
Quando inserido manualmente na página e codificando fisicamente os arquivos JS inseridos, funciona bem.
No entanto, quando inserido dinamicamente, o $.getScript('/Scripts/jquery_cookies_min.js', deleteCookies());
não está funcionando corretamente.
O problema é que o arquivo jquery_cookies_min.js
NÃO é carregado quando o retorno de chamada para executar deleteCookies
é disparado, então recebo um erro de console cannot call method 'filter' of undefined
.
Se eu mudar o script carregado por getScript
para um script diferente, outra cópia do jQuery por exemplo, ele carrega (posso ver que o console Network
do Chrome mostra jQuery laoded duas vezes), mas não carrega este arquivo Cookies.
Eu verifiquei e verifiquei duas vezes se o local está correto ... e de fato, funciona se eu incluir manualmente o arquivo JS ... Também tentei sem o /
anterior
Por que este script não está carregando ?!
EDITAR: Também tentei com o método do elemento appendChild de acordo com a maneira como estou carregando o jQuery ... mesmo resultado
Solução
Porque seu segundo parâmetro é uma chamada de função , não uma definição ou referência de função.
Tente remover o () de deleteCookies () ou use:
$.getScript('/path', function () { deleteCookies() });