背景
我正在使用ZenDesk的Widget (经典版)在页面上显示受限内容。根据文件
您可以通过定义一个window.zESettings对象来指定小部件的设置。确保在Widget (经典)代码段之前添加任何设置。
这意味着必须在加载脚本之前设置window.zESettings
。Widget (经典)片段使用类似于https://static.zdassets.com/ekr/snippet.js?key=xyz
的脚本URL加载
要在小部件中显示受限制的内容,我必须将jwt令牌设置为window.zESettings
,这需要在加载脚本之前进行。在服务器上生成jwt令牌。
Zendesk期望设置window.zESettings
,并在每个页面上加载脚本。这有点荒谬,因为时间用户的90+%不会在页面上使用Zendesk帮助。
问题
当用户点击一个按钮时,我想按下它。
$("#myHelpWidget").click(function () {
window.zESettings = {
webWidget: {
authenticate: {
jwtFn: function (callback) {
// Fetch your jwt token and then call our supplied callback below.
$.ajax({
type: "POST",
url: "/myaccount/jwtticket"
})
.done(function (data, textStatus, jqXHR) {
callback(data.Token);
})
}
},
contactForm: {
attachments: true,
fields: [
{ id: 'name', prefill: { '*': 'foo bar' } },
{ id: 'email', prefill: { '*': 'foobar@example.com' } }
]
}
}
};
// dynamically create script tag here
var s;
s = document.createElement('script');
s.id = "ze-snippet";
var head = document.getElementsByTagName("head")[0];
head.appendChild(s);
s.type = 'text/javascript';
s.src = "https://static.zdassets.com/ekr/snippet.js?key=xyz";
//ERROR: Get error at line below zE is not defined ****
zE('webWidget', 'show');
zE('webWidget', 'open');
zE('webWidget:on', 'close', function () {
zE('webWidget', 'hide');
});
})
上面的代码抛出错误zE is not defined
。是否有方法将脚本标记注入标头并等待其完全加载。(请注意,jQuery的$.getScript没有工作。)
发布于 2021-08-24 19:20:53
将所有zE
调用放在script.load
事件中:
var s;
s = document.createElement('script');
s.id = "ze-snippet";
var head = document.getElementsByTagName("head")[0];
head.appendChild(s);
s.type = 'text/javascript';
s.src = "https://static.zdassets.com/ekr/snippet.js?key=xyz";
s.onload = function() {
zE('webWidget', 'show');
zE('webWidget', 'open');
zE('webWidget:on', 'close', function () {
zE('webWidget', 'hide');
});
}
https://stackoverflow.com/questions/68912932
复制相似问题