CINXE.COM
Log In ‹ AutoGen Blog — WordPress
<!DOCTYPE html> <html lang="en-US"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Log In ‹ AutoGen Blog — WordPress</title> <meta name='robots' content='noindex, follow' /> <script type="text/javascript"> window._nslDOMReady = function (callback) { if ( document.readyState === "complete" || document.readyState === "interactive" ) { callback(); } else { document.addEventListener( "DOMContentLoaded", callback ); } }; </script><script type="text/javascript" src="https://devblogs.microsoft.com/autogen/wp-includes/js/jquery/jquery.min.js?ver=3.7.1" id="jquery-core-js"></script> <script type="text/javascript" src="https://devblogs.microsoft.com/autogen/wp-content/mu-plugins/force-strong-passwords/force-zxcvbn.min.js?ver=1.8.0" id="slt-fsp-force-zxcvbn-js"></script> <script type="text/javascript" src="https://devblogs.microsoft.com/autogen/wp-content/mu-plugins/force-strong-passwords/js-admin.min.js?ver=1.8.0" id="slt-fsp-admin-js-js"></script> <link rel='stylesheet' id='dashicons-css' href='https://devblogs.microsoft.com/autogen/wp-includes/css/dashicons.min.css' type='text/css' media='all' /> <link rel='stylesheet' id='buttons-css' href='https://devblogs.microsoft.com/autogen/wp-includes/css/buttons.min.css' type='text/css' media='all' /> <link rel='stylesheet' id='forms-css' href='https://devblogs.microsoft.com/autogen/wp-admin/css/forms.min.css' type='text/css' media='all' /> <link rel='stylesheet' id='l10n-css' href='https://devblogs.microsoft.com/autogen/wp-admin/css/l10n.min.css' type='text/css' media='all' /> <link rel='stylesheet' id='login-css' href='https://devblogs.microsoft.com/autogen/wp-admin/css/login.min.css' type='text/css' media='all' /> <link rel='stylesheet' id='aad-sso-wordpress-css' href='https://devblogs.microsoft.com/autogen/wp-content/plugins/aad-sso-wordpress065//login.css' type='text/css' media='all' /> <link rel='stylesheet' id='custom-login-css' href='https://devblogs.microsoft.com/autogen/wp-content/themes/devblogs-evo/css/login-styles.css' type='text/css' media='all' /> <meta name='referrer' content='strict-origin-when-cross-origin' /> <meta name="viewport" content="width=device-width" /> <link rel="icon" href="https://devblogs.microsoft.com/autogen/wp-content/uploads/sites/86/2024/11/Microsoft-favicon-48x48.jpg" sizes="32x32" /> <link rel="icon" href="https://devblogs.microsoft.com/autogen/wp-content/uploads/sites/86/2024/11/Microsoft-favicon-300x300.jpg" sizes="192x192" /> <link rel="apple-touch-icon" href="https://devblogs.microsoft.com/autogen/wp-content/uploads/sites/86/2024/11/Microsoft-favicon-300x300.jpg" /> <meta name="msapplication-TileImage" content="https://devblogs.microsoft.com/autogen/wp-content/uploads/sites/86/2024/11/Microsoft-favicon-300x300.jpg" /> <style type="text/css">div.nsl-container[data-align="left"] { text-align: left; } div.nsl-container[data-align="center"] { text-align: center; } div.nsl-container[data-align="right"] { text-align: right; } div.nsl-container div.nsl-container-buttons a[data-plugin="nsl"] { text-decoration: none; box-shadow: none; border: 0; } div.nsl-container .nsl-container-buttons { display: flex; padding: 5px 0; } div.nsl-container.nsl-container-block .nsl-container-buttons { display: inline-grid; grid-template-columns: minmax(145px, auto); } div.nsl-container-block-fullwidth .nsl-container-buttons { flex-flow: column; align-items: center; } div.nsl-container-block-fullwidth .nsl-container-buttons a, div.nsl-container-block .nsl-container-buttons a { flex: 1 1 auto; display: block; margin: 5px 0; width: 100%; } div.nsl-container-inline { margin: -5px; text-align: left; } div.nsl-container-inline .nsl-container-buttons { justify-content: center; flex-wrap: wrap; } div.nsl-container-inline .nsl-container-buttons a { margin: 5px; display: inline-block; } div.nsl-container-grid .nsl-container-buttons { flex-flow: row; align-items: center; flex-wrap: wrap; } div.nsl-container-grid .nsl-container-buttons a { flex: 1 1 auto; display: block; margin: 5px; max-width: 280px; width: 100%; } @media only screen and (min-width: 650px) { div.nsl-container-grid .nsl-container-buttons a { width: auto; } } div.nsl-container .nsl-button { cursor: pointer; vertical-align: top; border-radius: 4px; } div.nsl-container .nsl-button-default { color: #fff; display: flex; } div.nsl-container .nsl-button-icon { display: inline-block; } div.nsl-container .nsl-button-svg-container { flex: 0 0 auto; padding: 8px; display: flex; align-items: center; } div.nsl-container svg { height: 24px; width: 24px; vertical-align: top; } div.nsl-container .nsl-button-default div.nsl-button-label-container { margin: 0 24px 0 12px; padding: 10px 0; font-family: Helvetica, Arial, sans-serif; font-size: 16px; line-height: 20px; letter-spacing: .25px; overflow: hidden; text-align: center; text-overflow: clip; white-space: nowrap; flex: 1 1 auto; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-transform: none; display: inline-block; } div.nsl-container .nsl-button-google[data-skin="dark"] .nsl-button-svg-container { margin: 1px; padding: 7px; border-radius: 3px; background: #fff; } div.nsl-container .nsl-button-google[data-skin="light"] { border-radius: 1px; box-shadow: 0 1px 5px 0 rgba(0, 0, 0, .25); color: RGBA(0, 0, 0, 0.54); } div.nsl-container .nsl-button-apple .nsl-button-svg-container { padding: 0 6px; } div.nsl-container .nsl-button-apple .nsl-button-svg-container svg { height: 40px; width: auto; } div.nsl-container .nsl-button-apple[data-skin="light"] { color: #000; box-shadow: 0 0 0 1px #000; } div.nsl-container .nsl-button-facebook[data-skin="white"] { color: #000; box-shadow: inset 0 0 0 1px #000; } div.nsl-container .nsl-button-facebook[data-skin="light"] { color: #1877F2; box-shadow: inset 0 0 0 1px #1877F2; } div.nsl-container .nsl-button-spotify[data-skin="white"] { color: #191414; box-shadow: inset 0 0 0 1px #191414; } div.nsl-container .nsl-button-apple div.nsl-button-label-container { font-size: 17px; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; } div.nsl-container .nsl-button-slack div.nsl-button-label-container { font-size: 17px; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; } div.nsl-container .nsl-button-slack[data-skin="light"] { color: #000000; box-shadow: inset 0 0 0 1px #DDDDDD; } div.nsl-container .nsl-button-tiktok[data-skin="light"] { color: #161823; box-shadow: 0 0 0 1px rgba(22, 24, 35, 0.12); } div.nsl-container .nsl-button-kakao { color: rgba(0, 0, 0, 0.85); } .nsl-clear { clear: both; } .nsl-container { clear: both; } .nsl-disabled-provider .nsl-button { filter: grayscale(1); opacity: 0.8; } /*Button align start*/ div.nsl-container-inline[data-align="left"] .nsl-container-buttons { justify-content: flex-start; } div.nsl-container-inline[data-align="center"] .nsl-container-buttons { justify-content: center; } div.nsl-container-inline[data-align="right"] .nsl-container-buttons { justify-content: flex-end; } div.nsl-container-grid[data-align="left"] .nsl-container-buttons { justify-content: flex-start; } div.nsl-container-grid[data-align="center"] .nsl-container-buttons { justify-content: center; } div.nsl-container-grid[data-align="right"] .nsl-container-buttons { justify-content: flex-end; } div.nsl-container-grid[data-align="space-around"] .nsl-container-buttons { justify-content: space-around; } div.nsl-container-grid[data-align="space-between"] .nsl-container-buttons { justify-content: space-between; } /* Button align end*/ /* Redirect */ #nsl-redirect-overlay { display: flex; flex-direction: column; justify-content: center; align-items: center; position: fixed; z-index: 1000000; left: 0; top: 0; width: 100%; height: 100%; backdrop-filter: blur(1px); background-color: RGBA(0, 0, 0, .32);; } #nsl-redirect-overlay-container { display: flex; flex-direction: column; justify-content: center; align-items: center; background-color: white; padding: 30px; border-radius: 10px; } #nsl-redirect-overlay-spinner { content: ''; display: block; margin: 20px; border: 9px solid RGBA(0, 0, 0, .6); border-top: 9px solid #fff; border-radius: 50%; box-shadow: inset 0 0 0 1px RGBA(0, 0, 0, .6), 0 0 0 1px RGBA(0, 0, 0, .6); width: 40px; height: 40px; animation: nsl-loader-spin 2s linear infinite; } @keyframes nsl-loader-spin { 0% { transform: rotate(0deg) } to { transform: rotate(360deg) } } #nsl-redirect-overlay-title { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; font-size: 18px; font-weight: bold; color: #3C434A; } #nsl-redirect-overlay-text { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; text-align: center; font-size: 14px; color: #3C434A; } /* Redirect END*/</style><style type="text/css">/* Notice fallback */ #nsl-notices-fallback { position: fixed; right: 10px; top: 10px; z-index: 10000; } .admin-bar #nsl-notices-fallback { top: 42px; } #nsl-notices-fallback > div { position: relative; background: #fff; border-left: 4px solid #fff; box-shadow: 0 1px 1px 0 rgba(0, 0, 0, .1); margin: 5px 15px 2px; padding: 1px 20px; } #nsl-notices-fallback > div.error { display: block; border-left-color: #dc3232; } #nsl-notices-fallback > div.updated { display: block; border-left-color: #46b450; } #nsl-notices-fallback p { margin: .5em 0; padding: 2px; } #nsl-notices-fallback > div:after { position: absolute; right: 5px; top: 5px; content: '\00d7'; display: block; height: 16px; width: 16px; line-height: 16px; text-align: center; font-size: 20px; cursor: pointer; }</style> </head> <body class="login no-js login-action-login wp-core-ui locale-en-us"> <script type="text/javascript"> /* <![CDATA[ */ document.body.className = document.body.className.replace('no-js','js'); /* ]]> */ </script> <div id="login"> <h1><a href="https://devblogs.microsoft.com/autogen">Powered by WordPress</a></h1> <form name="loginform" id="loginform" action="https://devblogs.microsoft.com/autogen/wp-login.php?wpe-login=true" method="post"> <p> <label for="user_login">Username or Email Address</label> <input type="text" name="log" id="user_login" class="input" value="" size="20" autocapitalize="off" autocomplete="username" required="required" /> </p> <div class="user-pass-wrap"> <label for="user_pass">Password</label> <div class="wp-pwd"> <input type="password" name="pwd" id="user_pass" class="input password-input" value="" size="20" autocomplete="current-password" spellcheck="false" required="required" /> <button type="button" class="button button-secondary wp-hide-pw hide-if-no-js" data-toggle="0" aria-label="Show password"> <span class="dashicons dashicons-visibility" aria-hidden="true"></span> </button> </div> </div> <p class="aadsso-login-form-text"><a href="https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=22684337-6480-4c50-8a21-25043bb0038d&response_type=code&redirect_uri=https%3A%2F%2Fdevblogs.microsoft.com%2Fautogen%2Fwp-login.php&response_mode=query&scope=openid+profile+User.Read&state=03CF7D5D-6EBA-8230-F626-B0FE1CAD232D&nonce=03CF7D5D-6EBA-8230-F626-B0FE1CAD232D" id="ms-login">Sign in with Microsoft</a></p><p class="back-to-home"><a href="https://devblogs.microsoft.com/autogen" class="loginBack">Go Back To Blog</a></p><div id="nsl-custom-login-form-main"><div class="nsl-container nsl-container-block" data-align="left"><div class="nsl-container-buttons"><a href="https://devblogs.microsoft.com/autogen/wp-login.php?loginSocial=facebook&redirect=https%3A%2F%2Fdevblogs.microsoft.com%2Fautogen%2Ftag%2Fsemantic-kernel%2F" rel="nofollow" aria-label="Sign In with Facebook" data-plugin="nsl" data-action="connect" data-provider="facebook" data-popupwidth="600" data-popupheight="679"><span class="nsl-button nsl-button-default nsl-button-facebook" style="background-color:#fff;"><span class="nsl-button-svg-container"><svg xmlns="http://www.w3.org/2000/svg"><path fill="#4267b2" d="M22.688 0H1.323C.589 0 0 .589 0 1.322v21.356C0 23.41.59 24 1.323 24h11.505v-9.289H9.693V11.09h3.124V8.422c0-3.1 1.89-4.789 4.658-4.789 1.322 0 2.467.1 2.8.145v3.244h-1.922c-1.5 0-1.801.711-1.801 1.767V11.1h3.59l-.466 3.622h-3.113V24h6.114c.734 0 1.323-.589 1.323-1.322V1.322A1.302 1.302 0 0 0 22.688 0z"/></svg></span><span class="nsl-button-label-container">Sign In with Facebook</span></span></a><a href="https://devblogs.microsoft.com/autogen/wp-login.php?loginSocial=google&redirect=https%3A%2F%2Fdevblogs.microsoft.com%2Fautogen%2Ftag%2Fsemantic-kernel%2F" rel="nofollow" aria-label="Sign In with Google" data-plugin="nsl" data-action="connect" data-provider="google" data-popupwidth="600" data-popupheight="600"><div class="nsl-button nsl-button-default nsl-button-google" data-skin="light" style="background-color:#fff;"><div class="nsl-button-svg-container"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="#4285F4" d="M20.64 12.2045c0-.6381-.0573-1.2518-.1636-1.8409H12v3.4814h4.8436c-.2086 1.125-.8427 2.0782-1.7959 2.7164v2.2581h2.9087c1.7018-1.5668 2.6836-3.874 2.6836-6.615z"></path><path fill="#34A853" d="M12 21c2.43 0 4.4673-.806 5.9564-2.1805l-2.9087-2.2581c-.8059.54-1.8368.859-3.0477.859-2.344 0-4.3282-1.5831-5.036-3.7104H3.9574v2.3318C5.4382 18.9832 8.4818 21 12 21z"></path><path fill="#FBBC05" d="M6.964 13.71c-.18-.54-.2822-1.1168-.2822-1.71s.1023-1.17.2823-1.71V7.9582H3.9573A8.9965 8.9965 0 0 0 3 12c0 1.4523.3477 2.8268.9573 4.0418L6.964 13.71z"></path><path fill="#EA4335" d="M12 6.5795c1.3214 0 2.5077.4541 3.4405 1.346l2.5813-2.5814C16.4632 3.8918 14.426 3 12 3 8.4818 3 5.4382 5.0168 3.9573 7.9582L6.964 10.29C7.6718 8.1627 9.6559 6.5795 12 6.5795z"></path></svg></div><div class="nsl-button-label-container">Sign In with Google</div></div></a></div></div></div><script type="text/javascript"> window._nslDOMReady(function () { var container = document.getElementById('nsl-custom-login-form-main'), form = document.querySelector('#loginform,#registerform,#front-login-form,#setupform'); if (!form) { form = container.closest('form'); if (!form) { form = container.parentNode; } } var innerContainer = container.querySelector('.nsl-container'); if (innerContainer) { innerContainer.classList.add('nsl-container-login-layout-below'); innerContainer.style.display = 'block'; } var jetpackSSO = document.getElementById('jetpack-sso-wrap'); if (jetpackSSO) { form = jetpackSSO; } else { if (form.parentNode.classList.contains('tml')) { form = form.parentNode; } } form.appendChild(container); }); </script> <style type="text/css"> #nsl-custom-login-form-main .nsl-container { display: none; } #nsl-custom-login-form-main .nsl-container-login-layout-below { clear: both; padding: 20px 0 0; } .login form { padding-bottom: 20px; } #nsl-custom-login-form-jetpack-sso .nsl-container-login-layout-below { clear: both; padding: 0 0 20px; } </style> <p class="forgetmenot"><input name="rememberme" type="checkbox" id="rememberme" value="forever" /> <label for="rememberme">Remember Me</label></p> <p class="submit"> <input type="submit" name="wp-submit" id="wp-submit" class="button button-primary button-large" value="Log In" /> <input type="hidden" name="redirect_to" value="https://devblogs.microsoft.com/autogen/tag/semantic-kernel/" /> <input type="hidden" name="testcookie" value="1" /> </p> </form> <p id="nav"> <a rel="nofollow" class="wp-login-register" href="https://devblogs.microsoft.com/autogen/wp-login.php?action=register">Register</a> | <a class="wp-login-lost-password" href="https://devblogs.microsoft.com/autogen/wp-login.php?action=lostpassword">Lost your password?</a> </p> <script type="text/javascript"> /* <![CDATA[ */ function wp_attempt_focus() {setTimeout( function() {try {d = document.getElementById( "user_login" );d.focus(); d.select();} catch( er ) {}}, 200);} wp_attempt_focus(); if ( typeof wpOnload === 'function' ) { wpOnload() } /* ]]> */ </script> <p id="backtoblog"> <a href="https://devblogs.microsoft.com/autogen/">← Go to AutoGen Blog</a> </p> </div> <script type="text/javascript" id="commentsvote-js-extra"> /* <![CDATA[ */ var votecommentajax = {"ajaxurl":"https:\/\/devblogs.microsoft.com\/autogen\/wp-admin\/admin-ajax.php"}; /* ]]> */ </script> <script type="text/javascript" src="https://devblogs.microsoft.com/autogen/wp-content/plugins/devblogs-comments-evo/admin/js/commentsvote.js?ver=1.1" id="commentsvote-js"></script> <script type="text/javascript" id="zxcvbn-async-js-extra"> /* <![CDATA[ */ var _zxcvbnSettings = {"src":"https:\/\/devblogs.microsoft.com\/autogen\/wp-includes\/js\/zxcvbn.min.js"}; /* ]]> */ </script> <script type="text/javascript" src="https://devblogs.microsoft.com/autogen/wp-includes/js/zxcvbn-async.min.js?ver=1.0" id="zxcvbn-async-js"></script> <script type="text/javascript" src="https://devblogs.microsoft.com/autogen/wp-includes/js/dist/hooks.min.js?ver=2810c76e705dd1a53b18" id="wp-hooks-js"></script> <script type="text/javascript" src="https://devblogs.microsoft.com/autogen/wp-includes/js/dist/i18n.min.js?ver=5e580eb46a90c2b997e6" id="wp-i18n-js"></script> <script type="text/javascript" id="wp-i18n-js-after"> /* <![CDATA[ */ wp.i18n.setLocaleData( { 'text direction\u0004ltr': [ 'ltr' ] } ); /* ]]> */ </script> <script type="text/javascript" id="password-strength-meter-js-extra"> /* <![CDATA[ */ var pwsL10n = {"unknown":"Password strength unknown","short":"Very weak","bad":"Weak","good":"Medium","strong":"Strong","mismatch":"Mismatch"}; /* ]]> */ </script> <script type="text/javascript" src="https://devblogs.microsoft.com/autogen/wp-admin/js/password-strength-meter.min.js" id="password-strength-meter-js"></script> <script type="text/javascript" src="https://devblogs.microsoft.com/autogen/wp-includes/js/underscore.min.js?ver=1.13.4" id="underscore-js"></script> <script type="text/javascript" id="wp-util-js-extra"> /* <![CDATA[ */ var _wpUtilSettings = {"ajax":{"url":"\/autogen\/wp-admin\/admin-ajax.php"}}; /* ]]> */ </script> <script type="text/javascript" src="https://devblogs.microsoft.com/autogen/wp-includes/js/wp-util.min.js" id="wp-util-js"></script> <script type="text/javascript" id="user-profile-js-extra"> /* <![CDATA[ */ var userProfileL10n = {"user_id":"0","nonce":"daa1ec7324"}; /* ]]> */ </script> <script type="text/javascript" src="https://devblogs.microsoft.com/autogen/wp-admin/js/user-profile.min.js" id="user-profile-js"></script> <script type="text/javascript" src="https://devblogs.microsoft.com/autogen/wp-content/themes/devblogs-evo/js/login-scripts.js?ver=1.0.2" id="custom-loginjs-js"></script> <script type="text/javascript">(function (undefined) {let scriptOptions={"_localizedStrings":{"redirect_overlay_title":"Hold On","redirect_overlay_text":"You are being redirected to another page,<br>it may take a few seconds.","webview_notification_text":"The selected provider doesn't support embedded browsers!"},"_targetWindow":"prefer-popup","_redirectOverlay":"overlay-with-spinner-and-message","_unsupportedWebviewBehavior":""}; /** * Used when Cross-Origin-Opener-Policy blocked the access to the opener. We can't have a reference of the opened windows, so we should attempt to refresh only the windows that has opened popups. */ window._nslHasOpenedPopup = false; window._nslWebViewNoticeElement = null; window.NSLPopup = function (url, title, w, h) { const userAgent = navigator.userAgent, mobile = function () { return /\b(iPhone|iP[ao]d)/.test(userAgent) || /\b(iP[ao]d)/.test(userAgent) || /Android/i.test(userAgent) || /Mobile/i.test(userAgent); }, screenX = window.screenX !== undefined ? window.screenX : window.screenLeft, screenY = window.screenY !== undefined ? window.screenY : window.screenTop, outerWidth = window.outerWidth !== undefined ? window.outerWidth : document.documentElement.clientWidth, outerHeight = window.outerHeight !== undefined ? window.outerHeight : document.documentElement.clientHeight - 22, targetWidth = mobile() ? null : w, targetHeight = mobile() ? null : h, left = parseInt(screenX + (outerWidth - targetWidth) / 2, 10), right = parseInt(screenY + (outerHeight - targetHeight) / 2.5, 10), features = []; if (targetWidth !== null) { features.push('width=' + targetWidth); } if (targetHeight !== null) { features.push('height=' + targetHeight); } features.push('left=' + left); features.push('top=' + right); features.push('scrollbars=1'); const newWindow = window.open(url, title, features.join(',')); if (window.focus) { newWindow.focus(); } window._nslHasOpenedPopup = true; return newWindow; }; let isWebView = null; function checkWebView() { if (isWebView === null) { function _detectOS(ua) { if (/Android/.test(ua)) { return "Android"; } else if (/iPhone|iPad|iPod/.test(ua)) { return "iOS"; } else if (/Windows/.test(ua)) { return "Windows"; } else if (/Mac OS X/.test(ua)) { return "Mac"; } else if (/CrOS/.test(ua)) { return "Chrome OS"; } else if (/Firefox/.test(ua)) { return "Firefox OS"; } return ""; } function _detectBrowser(ua) { let android = /Android/.test(ua); if (/Opera Mini/.test(ua) || / OPR/.test(ua) || / OPT/.test(ua)) { return "Opera"; } else if (/CriOS/.test(ua)) { return "Chrome for iOS"; } else if (/Edge/.test(ua)) { return "Edge"; } else if (android && /Silk\//.test(ua)) { return "Silk"; } else if (/Chrome/.test(ua)) { return "Chrome"; } else if (/Firefox/.test(ua)) { return "Firefox"; } else if (android) { return "AOSP"; } else if (/MSIE|Trident/.test(ua)) { return "IE"; } else if (/Safari\//.test(ua)) { return "Safari"; } else if (/AppleWebKit/.test(ua)) { return "WebKit"; } return ""; } function _detectBrowserVersion(ua, browser) { if (browser === "Opera") { return /Opera Mini/.test(ua) ? _getVersion(ua, "Opera Mini/") : / OPR/.test(ua) ? _getVersion(ua, " OPR/") : _getVersion(ua, " OPT/"); } else if (browser === "Chrome for iOS") { return _getVersion(ua, "CriOS/"); } else if (browser === "Edge") { return _getVersion(ua, "Edge/"); } else if (browser === "Chrome") { return _getVersion(ua, "Chrome/"); } else if (browser === "Firefox") { return _getVersion(ua, "Firefox/"); } else if (browser === "Silk") { return _getVersion(ua, "Silk/"); } else if (browser === "AOSP") { return _getVersion(ua, "Version/"); } else if (browser === "IE") { return /IEMobile/.test(ua) ? _getVersion(ua, "IEMobile/") : /MSIE/.test(ua) ? _getVersion(ua, "MSIE ") : _getVersion(ua, "rv:"); } else if (browser === "Safari") { return _getVersion(ua, "Version/"); } else if (browser === "WebKit") { return _getVersion(ua, "WebKit/"); } return "0.0.0"; } function _getVersion(ua, token) { try { return _normalizeSemverString(ua.split(token)[1].trim().split(/[^\w\.]/)[0]); } catch (o_O) { } return "0.0.0"; } function _normalizeSemverString(version) { const ary = version.split(/[\._]/); return (parseInt(ary[0], 10) || 0) + "." + (parseInt(ary[1], 10) || 0) + "." + (parseInt(ary[2], 10) || 0); } function _isWebView(ua, os, browser, version, options) { switch (os + browser) { case "iOSSafari": return false; case "iOSWebKit": return _isWebView_iOS(options); case "AndroidAOSP": return false; case "AndroidChrome": return parseFloat(version) >= 42 ? /; wv/.test(ua) : /\d{2}\.0\.0/.test(version) ? true : _isWebView_Android(options); } return false; } function _isWebView_iOS(options) { const document = (window["document"] || {}); if ("WEB_VIEW" in options) { return options["WEB_VIEW"]; } return !("fullscreenEnabled" in document || "webkitFullscreenEnabled" in document || false); } function _isWebView_Android(options) { if ("WEB_VIEW" in options) { return options["WEB_VIEW"]; } return !("requestFileSystem" in window || "webkitRequestFileSystem" in window || false); } const options = {}, nav = window.navigator || {}, ua = nav.userAgent || "", os = _detectOS(ua), browser = _detectBrowser(ua), browserVersion = _detectBrowserVersion(ua, browser); isWebView = _isWebView(ua, os, browser, browserVersion, options); } return isWebView; } function isAllowedWebViewForUserAgent(provider) { const facebookAllowedWebViews = [ 'Instagram', 'FBAV', 'FBAN' ]; let whitelist = []; if (provider && provider === 'facebook') { whitelist = facebookAllowedWebViews; } const nav = window.navigator || {}, ua = nav.userAgent || ""; if (whitelist.length && ua.match(new RegExp(whitelist.join('|')))) { return true; } return false; } function disableButtonInWebView(providerButtonElement) { if (providerButtonElement) { providerButtonElement.classList.add('nsl-disabled-provider'); providerButtonElement.setAttribute('href', '#'); providerButtonElement.addEventListener('pointerdown', (e) => { if (!window._nslWebViewNoticeElement) { window._nslWebViewNoticeElement = document.createElement('div'); window._nslWebViewNoticeElement.id = "nsl-notices-fallback"; window._nslWebViewNoticeElement.addEventListener('pointerdown', function (e) { this.parentNode.removeChild(this); window._nslWebViewNoticeElement = null; }); const webviewNoticeHTML = '<div class="error"><p>' + scriptOptions._localizedStrings.webview_notification_text + '</p></div>'; window._nslWebViewNoticeElement.insertAdjacentHTML("afterbegin", webviewNoticeHTML); document.body.appendChild(window._nslWebViewNoticeElement); } }); } } window._nslDOMReady(function () { window.nslRedirect = function (url) { if (scriptOptions._redirectOverlay) { const overlay = document.createElement('div'); overlay.id = "nsl-redirect-overlay"; let overlayHTML = ''; const overlayContainer = "<div id='nsl-redirect-overlay-container'>", overlayContainerClose = "</div>", overlaySpinner = "<div id='nsl-redirect-overlay-spinner'></div>", overlayTitle = "<p id='nsl-redirect-overlay-title'>" + scriptOptions._localizedStrings.redirect_overlay_title + "</p>", overlayText = "<p id='nsl-redirect-overlay-text'>" + scriptOptions._localizedStrings.redirect_overlay_text + "</p>"; switch (scriptOptions._redirectOverlay) { case "overlay-only": break; case "overlay-with-spinner": overlayHTML = overlayContainer + overlaySpinner + overlayContainerClose; break; default: overlayHTML = overlayContainer + overlaySpinner + overlayTitle + overlayText + overlayContainerClose; break; } overlay.insertAdjacentHTML("afterbegin", overlayHTML); document.body.appendChild(overlay); } window.location = url; }; let targetWindow = scriptOptions._targetWindow || 'prefer-popup', lastPopup = false; const buttonLinks = document.querySelectorAll(' a[data-plugin="nsl"][data-action="connect"], a[data-plugin="nsl"][data-action="link"]'); buttonLinks.forEach(function (buttonLink) { buttonLink.addEventListener('click', function (e) { if (lastPopup && !lastPopup.closed) { e.preventDefault(); lastPopup.focus(); } else { let href = this.href, success = false; if (href.indexOf('?') !== -1) { href += '&'; } else { href += '?'; } const redirectTo = this.dataset.redirect; if (redirectTo === 'current') { href += 'redirect=' + encodeURIComponent(window.location.href) + '&'; } else if (redirectTo && redirectTo !== '') { href += 'redirect=' + encodeURIComponent(redirectTo) + '&'; } if (targetWindow !== 'prefer-same-window' && checkWebView()) { targetWindow = 'prefer-same-window'; } if (targetWindow === 'prefer-popup') { lastPopup = NSLPopup(href + 'display=popup', 'nsl-social-connect', this.dataset.popupwidth, this.dataset.popupheight); if (lastPopup) { success = true; e.preventDefault(); } } else if (targetWindow === 'prefer-new-tab') { const newTab = window.open(href + 'display=popup', '_blank'); if (newTab) { if (window.focus) { newTab.focus(); } success = true; window._nslHasOpenedPopup = true; e.preventDefault(); } } if (!success) { window.location = href; e.preventDefault(); } } }); }); let buttonCountChanged = false; const googleLoginButtons = document.querySelectorAll(' a[data-plugin="nsl"][data-provider="google"]'); if (googleLoginButtons.length && checkWebView()) { googleLoginButtons.forEach(function (googleLoginButton) { if (scriptOptions._unsupportedWebviewBehavior === 'disable-button') { disableButtonInWebView(googleLoginButton); } else { googleLoginButton.remove(); buttonCountChanged = true; } }); } const facebookLoginButtons = document.querySelectorAll(' a[data-plugin="nsl"][data-provider="facebook"]'); if (facebookLoginButtons.length && checkWebView() && /Android/.test(window.navigator.userAgent) && !isAllowedWebViewForUserAgent('facebook')) { facebookLoginButtons.forEach(function (facebookLoginButton) { if (scriptOptions._unsupportedWebviewBehavior === 'disable-button') { disableButtonInWebView(facebookLoginButton); } else { facebookLoginButton.remove(); buttonCountChanged = true; } }); } const separators = document.querySelectorAll('div.nsl-separator'); if (buttonCountChanged && separators.length) { separators.forEach(function (separator) { const separatorParentNode = separator.parentNode; if (separatorParentNode) { const separatorButtonContainer = separatorParentNode.querySelector('div.nsl-container-buttons'); if (separatorButtonContainer && !separatorButtonContainer.hasChildNodes()) { separator.remove(); } } }) } }); /** * Cross-Origin-Opener-Policy blocked the access to the opener */ if (typeof BroadcastChannel === "function") { const _nslLoginBroadCastChannel = new BroadcastChannel('nsl_login_broadcast_channel'); _nslLoginBroadCastChannel.onmessage = (event) => { if (window?._nslHasOpenedPopup && event.data?.action === 'redirect') { window._nslHasOpenedPopup = false; const url = event.data?.href; _nslLoginBroadCastChannel.close(); if (typeof window.nslRedirect === 'function') { window.nslRedirect(url); } else { window.opener.location = url; } } }; }})();</script> </body> </html>