2012-02-27 72 views
3

UserVoice的要求您异步他们在页面加载插件其代码如下加载:负载UserVoice的API

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); 
      })(); 

然后他们给你来运行其上点击widget作为这样的选项:

javascript:UserVoice.showPopupWidget(); 

如果我不想一旦页面在所有只有当用户点击链接加载到加载其插件?

我假设是这样的:

$('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(); 

    }); 

但它不实际工作?有没有其他已知的方法?

回答

5

试试这个:

$('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 
    ); 
}); 
+0

这看起来约权(与我做了修改)。它使用jQuery来加载脚本并将其添加到页面中,并且一旦该脚本被加载,就会调用显示弹出窗口小部件的回调函数。 – AKX 2012-02-27 12:28:22

+0

并且通过额外的编辑,UserVoice脚本不应该被加载两次。 – AKX 2012-02-27 12:30:20

+0

任何想法是什么交易与随机js文件名? cyoJokWhM5SEW9I3h3oBFQ.js。我不愿意将它硬编码到我的脚本中,因为它看起来可能会发生变化。有什么建议? – 2013-02-09 15:16:08

0

试试这个

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

看到here for more details