首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将脚本标记注入标头?

如何将脚本标记注入标头?
EN

Stack Overflow用户
提问于 2021-08-24 19:15:30
回答 1查看 934关注 0票数 1

背景

我正在使用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帮助。

问题

当用户点击一个按钮时,我想按下它。

代码语言:javascript
运行
复制
$("#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没有工作。)

EN

回答 1

Stack Overflow用户

发布于 2021-08-24 19:20:53

将所有zE调用放在script.load事件中:

代码语言:javascript
运行
复制
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');
     });
}        
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68912932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档