Я использую веб-виджет Zendesk в решении ASP.NET MVC для отображения контактной формы и справочного центра.Поскольку в справочном центре отображаются статьи с ограниченным доступом, нам необходимо отправить токен аутентификации JWT ДО , загрузив сценарии виджетов.Приведенный ниже код выглядит как _layout.cshtml
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script>
window.zESettings = {
authenticate: {
jwt: 'sometoken'
}
};
</script>
<script id="ze-snippet" src="https://static.zdassets.com/ekr/snippet.js?key=xxxxxxxxxx"></script>
</head>
<body>
</body>
Приведенный выше код отображает виджет справки zendesk на каждой странице и работает, как и ожидалось.
Однако это не оптимизированное решение.На каждой странице загрузки вышеуказанный код должен будет создать токен, авторизоваться и скачать скрипт.На самом деле 90% времени наши пользователи даже не используют виджет справки.
Поэтому, чтобы избежать этого, у меня есть button
где-то на странице, и когда пользователь нажимает кнопку, я хотел бы создать токен, авторизоваться,скачать скрипт виджета и активировать виджет.Согласно документации здесь я могу программно показывать, скрывать и активировать виджет.
Я использую ASP.NET MVC с jQuery.Ниже приведен мой код, но он не работает
var zd = (function ($) {
var module = {};
module.configure = function () {
$("#myHelpWidgetButton").click(function () {
try {
$.ajax({
type: "POST",
url: "/zendesk/token" // get token from server
})
.done(function (token, textStatus, jqXHR) {
window.zESettings = {
authenticate: {
jwt: token
}
};
// download script only after zEsettings are set
$.getScript("https://static.zdassets.com/ekr/snippet.js?key=xxxxxxxx",
function (data, textStatus, jqxhr) {
zE(function () {
zE.hide(); // never gets fired ??
});
// get currently logged in user info and set to contact form
// and then activate
$.get("/zendesk/userinfo")
.done(function (userinfo) {
zE(function () {
zE.identify(userinfo); // never gets fired??
zE.activate(); // never gets fired??
});
})
})
})
}
catch (ex) {
logger.log({ message: "exception occurred", exception: ex });
}
})
}
return module;
})(jQuery);
, а затем в _layout.cshtml
вызовите zd.configure (), чтобы прикрепить событие клика
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script>
</script>
<script>
zd.configure();
</script>
</head>
<body>
</body>
</html>
Ajax-вызовы работают, но zE.hide()
, zE.identify()
и zE.activate()
никогда не будут уволены.
Я хотел бы знать, возможно ли это вообще?Поскольку $.getscript()
обратный вызов запускается, когда скрипт загружен, но не обязательно выполняется, поэтому zE
может быть недоступен