我正在尝试为注销时的 cookie 创建会话删除方法。
需要删除具有特定启动键的 cookie,所以我制作了一个可以工作的小 javascript。
试图将我的所有注销代码保存在一个地方,我试图动态添加 Javascript。
在我的代码背后,我正在执行以下操作:
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)
显然 logoutJS 是在注销页面加载时要调用的 Javascript,然后重定向回登录。
当手动插入页面并对插入的 JS 文件进行物理编码时,效果很好。
但是,当动态插入时,$.getScript('/Scripts/jquery_cookies_min.js', deleteCookies());
无法正常工作。
问题是,jquery_cookies_min.js
当调用运行的回调被触发时,文件没有被加载,deleteCookies
所以我得到一个控制台错误cannot call method 'filter' of undefined
。
如果我将加载的脚本更改getScript
为不同的脚本,例如另一个 jQuery 副本,则它会加载(我可以看到 ChromeNetwork
控制台显示 jQuery 已加载两次),但它不会加载此 Cookies 文件。
我已经检查并仔细检查了一百万次位置是否正确......事实上,如果我手动包含 JS 文件,它就可以工作......我也试过没有前面的/
为什么这个脚本没有加载?!
编辑:我也按照加载jQuery的方式尝试了appendChild元素方法......结果相同