Javascript 单击加载uservoice API

Javascript 单击加载uservoice API,javascript,jquery,asynchronous,widget,uservoice,Javascript,Jquery,Asynchronous,Widget,Uservoice,Uservoice要求您在页面加载上加载异步的小部件,代码如下所示: var uvOptions = {}; (function() { var uv = document.createElement('script'); uv.type = 'text/javascript'; uv.async = true; uv.src = ('https:' == document.location.protocol ? 'https:

Uservoice要求您在页面加载上加载异步的小部件,代码如下所示:

var uvOptions = {};
          (function() {
            var uv = document.createElement('script'); uv.type = 'text/javascript'; uv.async = true;
            uv.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'widget.uservoice.com/loremipsum.js';
            var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(uv, s);
          })();
 $('selector').click(function () {

         var uvOptions = {};
          (function() {
            var uv = document.createElement('script'); uv.type = 'text/javascript'; uv.async = true;
            uv.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'widget.uservoice.com/cyoJokWhM5SEW9I3h3oBFQ.js';
            var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(uv, s);
          })();
       javascript:UserVoice.showPopupWidget();

   });
然后,他们会让您选择在单击时运行其小部件,如下所示:

javascript:UserVoice.showPopupWidget();
如果我不想在用户点击链接时加载页面后再加载他们的小部件怎么办

我会这样假设:

var uvOptions = {};
          (function() {
            var uv = document.createElement('script'); uv.type = 'text/javascript'; uv.async = true;
            uv.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'widget.uservoice.com/loremipsum.js';
            var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(uv, s);
          })();
 $('selector').click(function () {

         var uvOptions = {};
          (function() {
            var uv = document.createElement('script'); uv.type = 'text/javascript'; uv.async = true;
            uv.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'widget.uservoice.com/cyoJokWhM5SEW9I3h3oBFQ.js';
            var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(uv, s);
          })();
       javascript:UserVoice.showPopupWidget();

   });
但它实际上不起作用?还有其他已知的方法吗?

试试这个:

$('selector').click(function () {
    var uvOptions = {};
    var showWidget = function() { window.UserVoice.showPopupWidget(); };
    if(window.UserVoice) return showWidget(); // Loaded already
    $.getScript(
       ('https:' == document.location.protocol ? 'https://' : 'http://') +
       'widget.uservoice.com/cyoJokWhM5SEW9I3h3oBFQ.js',
       showWidget
    );
});
试试这个

<a href="http://back-up-url-goes-here.com" data-uv-trigger>Contact us</a>


请参见

这看起来差不多正确(通过我所做的编辑)。它使用jQuery加载脚本并将其添加到页面中,一旦加载脚本,就会调用显示弹出窗口小部件的回调。通过额外的编辑,UserVoice脚本不应该加载两次。知道随机js文件名的处理方法吗?cyoJokWhM5SEW9I3h3oBFQ.js。我不愿意硬编码到我的脚本中,因为它看起来可能会改变。有什么建议吗?@GwynHowell我想文件名对应于UserVoice管理页面中的设置:默认选项卡选择、小部件模式等。我的项目我们使用用户语音api,因此我必须编辑java脚本文件(cyoJokWhM5SEW9I3h3oBFQ.js)中的一些内容。我如何才能做到这一点。