ログアウト時にCookieのセッション削除メソッドを作成しようとしています。
特定の開始キーを持つCookieを削除する必要があるため、機能する小さなJavaScriptを作成しました。
すべてのログアウトコードを1つの場所に保持しようとして、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が2回ロードされていることがわかります)が、このCookieファイルはロードされません。
私は場所が正しいことを何百万回もチェックして再チェックしました...そして実際、JSファイルを手動でインクルードすると機能します...私も前のことなしで試しました/
このスクリプトがロードされないのはなぜですか?!
編集:jQueryをロードする方法に従ってappendChild要素メソッドも試しました...同じ結果